From e7df031e2bfa7771888fa4e4b2b4e54245e66da2 Mon Sep 17 00:00:00 2001 From: Joe <153763944+Joe-Fernico@users.noreply.github.com> Date: Thu, 18 Sep 2025 11:57:20 +0000 Subject: [PATCH] ButtonGroups to support ItemsSource --- .../Controls/Button/ButtonGroup.cs | 36 +++++++++++++++++-- .../ButtonGroupItemStyleSelector.cs | 32 ++++++++++------- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/src/Shared/HandyControl_Shared/Controls/Button/ButtonGroup.cs b/src/Shared/HandyControl_Shared/Controls/Button/ButtonGroup.cs index 423e2f5d9..5f2eef260 100644 --- a/src/Shared/HandyControl_Shared/Controls/Button/ButtonGroup.cs +++ b/src/Shared/HandyControl_Shared/Controls/Button/ButtonGroup.cs @@ -28,13 +28,43 @@ public LinearLayout Layout set => SetValue(LayoutProperty, value); } - protected override void OnRender(DrawingContext drawingContext) + protected override void OnRender(DrawingContext drawingContext) { var count = Items.Count; for (var i = 0; i < count; i++) { - var item = (ButtonBase) Items[i]; - item.Style = ItemContainerStyleSelector?.SelectStyle(item, this); + if (this.GetButtonBaseByIndex(i) is ButtonBase buttonBase) + { + buttonBase.Style = ItemContainerStyleSelector?.SelectStyle(Items[i], this); + } } } + +} + +public static class ButtonGroupExtensions +{ + public static ButtonBase GetButtonBaseByIndex(this ButtonGroup buttonGroup, int index) + { + return GetButtonBaseByItem(buttonGroup, buttonGroup.Items[index]); + } + + public static ButtonBase GetButtonBaseByItem(this ButtonGroup buttonGroup, object item) + { + if (item is ButtonBase buttonBase) + { + return buttonBase; + } + var container = buttonGroup.ItemContainerGenerator.ContainerFromItem(item); + + if (container is ButtonBase buttonBase2) + { + return buttonBase2; + } + else if (container != null && VisualTreeHelper.GetChildrenCount(container) > 0 && VisualTreeHelper.GetChild(container, 0) is ButtonBase buttonBase3) + { + return buttonBase3; + } + return null; + } } diff --git a/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs b/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs index 6dca25eba..f82aa404e 100644 --- a/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs +++ b/src/Shared/HandyControl_Shared/Tools/StyleSelector/ButtonGroupItemStyleSelector.cs @@ -34,17 +34,17 @@ public class ButtonGroupItemStyleSelector : StyleSelector [ResourceToken.ToggleButtonGroupItemDefault] = ResourceHelper.GetResourceInternal