From 38b75310b574b97ecbd99d232caadcdcc5507b96 Mon Sep 17 00:00:00 2001 From: CHINBOY Date: Thu, 26 Jun 2025 23:10:47 +0800 Subject: [PATCH] Refactor treeview add ToggleType support --- .../Column/Filters/DataGridFilterIndicator.cs | 6 +- .../Filters/DataGridTreeFilterFlyout.cs | 31 ++++---- .../TreeView/Themes/TreeViewItemTheme.axaml | 35 +++++++-- .../TreeView/Themes/TreeViewThemeConstants.cs | 2 + src/AtomUI.Controls/TreeView/TreeView.cs | 36 ++++----- src/AtomUI.Controls/TreeView/TreeViewItem.cs | 78 +++---------------- 6 files changed, 75 insertions(+), 113 deletions(-) diff --git a/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs b/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs index 532ff6c21..7078b47db 100644 --- a/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs +++ b/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridFilterIndicator.cs @@ -151,6 +151,10 @@ internal class DataGridFilterIndicator : IconButton Placement = PlacementMode.BottomEdgeAlignedRight, IsDetectMouseClickEnabled = false }; + BindUtils.RelayBind(this, FilterMultipleProperty, treeFlyout, DataGridTreeFilterFlyout.ToggleTypeProperty, (v) => + { + return v ? ItemToggleType.CheckBox : ItemToggleType.Radio; + }); BindUtils.RelayBind(owningGrid, MotionAwareControlProperty.IsMotionEnabledProperty, treeFlyout, MotionAwareControlProperty.IsMotionEnabledProperty); var selectAllTreeItem = new DataGridFilterTreeItem(); @@ -208,7 +212,7 @@ internal class DataGridFilterIndicator : IconButton Header = item.Text, FilterValue = item.Value }; - // BindUtils.RelayBind(this, ToggleTypeProperty, treeItem, TreeViewItem.ToggleTypeProperty); + treeItems.Add(treeItem); if (item.Children.Count > 0) { diff --git a/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs b/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs index 10e60f921..1b94a2359 100644 --- a/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs +++ b/src/AtomUI.Controls.DataGrid/Column/Filters/DataGridTreeFilterFlyout.cs @@ -1,13 +1,22 @@ using AtomUI.Data; using AtomUI.MotionScene; +using Avalonia; using Avalonia.Controls; using Avalonia.Input; -using Avalonia.Metadata; namespace AtomUI.Controls; internal class DataGridTreeFilterFlyout : TreeViewFlyout { + internal static readonly StyledProperty ToggleTypeProperty = + TreeView.ToggleTypeProperty.AddOwner(); + + public ItemToggleType ToggleType + { + get => GetValue(ToggleTypeProperty); + set => SetValue(ToggleTypeProperty, value); + } + public event EventHandler? FilterValuesSelected; public DataGridTreeFilterFlyout() @@ -21,11 +30,11 @@ internal class DataGridTreeFilterFlyout : TreeViewFlyout var presenter = new DataGridTreeFilterFlyoutPresenter { IsDefaultExpandAll = true, - ItemsSource = Items, - IsCheckable = true + ItemsSource = Items }; - BindUtils.RelayBind(this, IsShowArrowEffectiveProperty, presenter, MenuFlyoutPresenter.IsShowArrowProperty); - BindUtils.RelayBind(this, IsMotionEnabledProperty, presenter, MenuFlyoutPresenter.IsMotionEnabledProperty); + BindUtils.RelayBind(this, IsShowArrowEffectiveProperty, presenter, DataGridTreeFilterFlyoutPresenter.IsShowArrowProperty); + BindUtils.RelayBind(this, IsMotionEnabledProperty, presenter, DataGridTreeFilterFlyoutPresenter.IsMotionEnabledProperty); + BindUtils.RelayBind(this, ToggleTypeProperty, presenter, DataGridTreeFilterFlyoutPresenter.ToggleTypeProperty); return presenter; } @@ -39,18 +48,6 @@ internal class DataGridTreeFilterFlyout : TreeViewFlyout internal class DataGridFilterTreeItem : TreeViewItem { public string? FilterValue { get; set; } - - protected override void NotifyHeaderClick() - { - if (IsChecked is null) - { - IsChecked = true; - } - else - { - IsChecked = !IsChecked; - } - } protected override void OnHeaderDoubleTapped(TappedEventArgs e) { diff --git a/src/AtomUI.Controls/TreeView/Themes/TreeViewItemTheme.axaml b/src/AtomUI.Controls/TreeView/Themes/TreeViewItemTheme.axaml index 9ac6c1d6d..117e6cf60 100644 --- a/src/AtomUI.Controls/TreeView/Themes/TreeViewItemTheme.axaml +++ b/src/AtomUI.Controls/TreeView/Themes/TreeViewItemTheme.axaml @@ -4,7 +4,7 @@ xmlns:atom="https://atomui.net" x:Class="AtomUI.Controls.Themes.TreeViewItemTheme"> - + - + IsChecked="{TemplateBinding IsChecked}" + IsEnabled="{TemplateBinding IsEnabled}" + IsVisible="False" /> + + + + + + + + + @@ -122,7 +145,7 @@ -