/// <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(); } }
/// <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(); }