Inheritance: Windows.UI.Xaml.Controls.UserControl
Exemplo n.º 1
0
        /// <summary>
        /// Event handler for a value change on a radio button on this pie.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="slice"></param>
        private void PieSlice_ChangeSelectedEvent(object sender, PieSlice slice)
        {
            if (slice != null && slice.OriginalRadialMenuButton.Type == RadialMenuButton.ButtonType.Radio)
            {
                SelectedItem = slice.OriginalRadialMenuButton;
            }

            foreach (var ps in PieSlices.Where(ps => ps.OriginalRadialMenuButton.Type == RadialMenuButton.ButtonType.Radio &&
                                               ps.OriginalRadialMenuButton.MenuSelected && ps.StartAngle != slice.StartAngle))
            {
                ps.OriginalRadialMenuButton.MenuSelected = false;
                ps.UpdateSliceForRadio();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Draw or redraw the pie by generating PieSlices from passed RadialMenuButtons.
        /// Previously created PieSlices on this Pie will be thrown away.
        /// </summary>
        public void Draw()
        {
            foreach (var pieSlice in PieSlices)
            {
                pieSlice.ChangeMenuRequestEvent -= SourceRadialMenu.ChangeMenu;
                pieSlice.ChangeSelectedEvent    -= PieSlice_ChangeSelectedEvent;
            }

            PieSlices.Clear();
            var startAngle = StartAngle;

            // Setup Background Ellipse
            if (SourceRadialMenu.HasBackgroundEllipse)
            {
                BackgroundEllipse.Height          = Height;
                BackgroundEllipse.Width           = Width;
                BackgroundEllipse.StrokeThickness = SourceRadialMenu.OuterThickness;
                BackgroundEllipse.Stroke          = new SolidColorBrush(SourceRadialMenu.OuterDisabledColor);
                BackgroundEllipse.Fill            = new SolidColorBrush(SourceRadialMenu.BackgroundEllipseFill);
            }

            // Draw PieSlices for each Slice Object
            foreach (var slice in Slices)
            {
                var sliceSize = 360.00 / Slices.Count;
                var pieSlice  = new PieSlice
                {
                    StartAngle = startAngle,
                    Angle      = sliceSize,
                    Radius     = Size / 2,
                    Height     = Height,
                    Width      = Width,
                    // Arc & Stroke
                    StrokeColor       = slice.StrokeColor ?? SourceRadialMenu.InnerNormalColor,
                    StrokeThickness   = slice.StrokeThickness ?? 0,
                    OuterArcThickness = slice.OuterThickness ?? SourceRadialMenu.OuterThickness,
                    // The defaults below use OneNote-like purple colors
                    InnerNormalColor              = slice.InnerNormalColor ?? SourceRadialMenu.InnerNormalColor,
                    InnerHoverColor               = slice.InnerHoverColor ?? SourceRadialMenu.InnerHoverColor,
                    InnerTappedColor              = slice.InnerTappedColor ?? SourceRadialMenu.InnerTappedColor,
                    InnerReleasedColor            = slice.InnerReleasedColor ?? SourceRadialMenu.InnerReleasedColor,
                    OuterNormalColor              = slice.OuterNormalColor ?? SourceRadialMenu.OuterNormalColor,
                    OuterDisabledColor            = slice.OuterDisabledColor ?? SourceRadialMenu.OuterDisabledColor,
                    OuterHoverColor               = slice.OuterHoverColor ?? SourceRadialMenu.OuterHoverColor,
                    OuterTappedColor              = slice.OuterTappedColor ?? SourceRadialMenu.OuterTappedColor,
                    IndicationArcStrokeThickness  = slice.IndicationArcStrokeThickness ?? SourceRadialMenu.IndicationArcStrokeThickness,
                    IndicationArcColor            = slice.IndicationArcColor ?? SourceRadialMenu.IndicationArcColor,
                    IndicationArcDistanceFromEdge = slice.IndicationArcDistanceFromEdge ?? SourceRadialMenu.IndicationArcDistanceFromEdge,
                    UseIndicationArc              = slice.UseIndicationArc ?? SourceRadialMenu.UseIndicationArcs,
                    // Label
                    IconSize            = slice.IconSize,
                    Icon                = slice.Icon,
                    IconFontFamily      = slice.IconFontFamily,
                    IconForegroundBrush = slice.IconForegroundBrush,
                    IconImage           = slice.IconImage,
                    IconImageSideLength = (Size / 2) * .25,
                    IsLabelHidden       = slice.IsLabelHidden,
                    Label               = slice.Label,
                    LabelSize           = slice.LabelSize,
                    // Original Button
                    OriginalRadialMenuButton = slice,
                    // Access Keys
                    OuterAccessKey = slice.OuterAccessKey,
                    InnerAccessKey = slice.InnerAccessKey
                };

                if (slice.Type == RadialMenuButton.ButtonType.Custom)
                {
                    pieSlice.CustomValue = (string)slice.Value;
                }

                // Allow slice to call the change request method on the radial menu
                pieSlice.ChangeMenuRequestEvent += SourceRadialMenu.ChangeMenu;
                // Allow slice to call the change selected request to clear all other radio buttons
                pieSlice.ChangeSelectedEvent += PieSlice_ChangeSelectedEvent;
                PieSlices.Add(pieSlice);
                startAngle += sliceSize;
            }

            FindSelectedPieSlice();
        }