From 94ee3367141c8841d3ca7abe3dd2fd4e365c543a Mon Sep 17 00:00:00 2001 From: NaBian <836904362@qq.com> Date: Mon, 25 Aug 2025 23:14:42 +0800 Subject: [PATCH] feat: add avalonia basic ComboBox style. --- .../Data/DemoInfo.json | 2 +- .../UserControl/Styles/ComboBoxDemo.axaml | 101 ++++ .../UserControl/Styles/ComboBoxDemo.axaml.cs | 10 + .../Common/InputElementDemoViewModel.cs | 23 + .../Themes/Styles/ComboBox.axaml | 444 ++++++++++++++++++ .../Themes/Styles/TextBox.axaml | 6 + .../HandyControl_Avalonia/Themes/Theme.axaml | 1 + .../Themes/Styles/Base/ComboBoxBaseStyle.xaml | 4 +- .../HandyControl_Net_40/Themes/Theme.xaml | 2 +- .../Common/InputElementDemoViewModel.cs | 4 +- .../Themes/Styles/Base/ComboBoxBaseStyle.xaml | 2 +- .../HandyControl_Shared/Themes/Theme.xaml | 2 +- 12 files changed, 593 insertions(+), 8 deletions(-) create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml create mode 100644 src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml.cs create mode 100644 src/Avalonia/HandyControl_Avalonia/Themes/Styles/ComboBox.axaml diff --git a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json index 38822a7d..da4764c2 100644 --- a/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json +++ b/src/Avalonia/HandyControlDemo_Avalonia/Data/DemoInfo.json @@ -15,7 +15,7 @@ [ "TextBlock", "TextBlockDemo", "Brush.TextBlock", "", "" ], [ "NumericUpDown", "NumericUpDownDemo", "Brush.NumericListBox", "", "" ], [ "TextBox", "TextBoxDemo", "Brush.TextBox", "", "" ], - [ "ComboBox", "NativeComboBoxDemo", "Brush.ComboBox", "", "" ], + [ "ComboBox", "ComboBoxDemo", "Brush.ComboBox", "", "" ], [ "Expander", "ExpanderDemo", "Brush.Expander", "", "" ], [ "ProgressBar", "NativeProgressBarDemo", "Brush.ProgressBar", "", "" ], [ "Calendar", "CalendarDemo", "Brush.Calendar", "", "" ], diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml new file mode 100644 index 00000000..efe0338b --- /dev/null +++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml.cs b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml.cs new file mode 100644 index 00000000..2a7ecb08 --- /dev/null +++ b/src/Avalonia/HandyControlDemo_Avalonia/UserControl/Styles/ComboBoxDemo.axaml.cs @@ -0,0 +1,10 @@ +namespace HandyControlDemo.UserControl; + +public partial class ComboBoxDemo : Avalonia.Controls.UserControl +{ + public ComboBoxDemo() + { + InitializeComponent(); + } +} + diff --git a/src/Avalonia/HandyControlDemo_Avalonia/ViewModel/Common/InputElementDemoViewModel.cs b/src/Avalonia/HandyControlDemo_Avalonia/ViewModel/Common/InputElementDemoViewModel.cs index b2be4b02..3fe76999 100644 --- a/src/Avalonia/HandyControlDemo_Avalonia/ViewModel/Common/InputElementDemoViewModel.cs +++ b/src/Avalonia/HandyControlDemo_Avalonia/ViewModel/Common/InputElementDemoViewModel.cs @@ -1,5 +1,9 @@ +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.Globalization; using CommunityToolkit.Mvvm.ComponentModel; +using HandyControlDemo.Properties.Langs; +using HandyControlDemo.Tools.Converter; namespace HandyControlDemo.ViewModel; @@ -20,4 +24,23 @@ public partial class InputElementDemoViewModel : ObservableValidator [ObservableProperty] private double? _doubleValue1; [ObservableProperty] private double? _doubleValue2; + + [ObservableProperty] private IList? _dataList; + + public InputElementDemoViewModel() + { + DataList = GetComboBoxDemoDataList(); + } + + private static List GetComboBoxDemoDataList() + { + var converter = new StringRepeatConverter(); + var list = new List(); + for (int i = 1; i <= 9; i++) + { + list.Add($"{converter.Convert(Lang.Text, null!, i, CultureInfo.CurrentCulture)}{i}"); + } + + return list; + } } diff --git a/src/Avalonia/HandyControl_Avalonia/Themes/Styles/ComboBox.axaml b/src/Avalonia/HandyControl_Avalonia/Themes/Styles/ComboBox.axaml new file mode 100644 index 00000000..8e69bbbc --- /dev/null +++ b/src/Avalonia/HandyControl_Avalonia/Themes/Styles/ComboBox.axaml @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia/HandyControl_Avalonia/Themes/Styles/TextBox.axaml b/src/Avalonia/HandyControl_Avalonia/Themes/Styles/TextBox.axaml index dab0bc03..3dc7586c 100644 --- a/src/Avalonia/HandyControl_Avalonia/Themes/Styles/TextBox.axaml +++ b/src/Avalonia/HandyControl_Avalonia/Themes/Styles/TextBox.axaml @@ -48,6 +48,12 @@ BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" /> + + diff --git a/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml b/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml index 303486ef..04fbaf48 100644 --- a/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml +++ b/src/Net_40/HandyControl_Net_40/Themes/Styles/Base/ComboBoxBaseStyle.xaml @@ -2,7 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:hc="clr-namespace:HandyControl.Controls" xmlns:system="clr-namespace:System;assembly=mscorlib"> - + @@ -478,7 +478,7 @@ - + diff --git a/src/Net_40/HandyControl_Net_40/Themes/Theme.xaml b/src/Net_40/HandyControl_Net_40/Themes/Theme.xaml index 2ed58151..b07b6204 100644 --- a/src/Net_40/HandyControl_Net_40/Themes/Theme.xaml +++ b/src/Net_40/HandyControl_Net_40/Themes/Theme.xaml @@ -5620,7 +5620,7 @@ - + diff --git a/src/Shared/HandyControlDemo_Shared/ViewModel/Common/InputElementDemoViewModel.cs b/src/Shared/HandyControlDemo_Shared/ViewModel/Common/InputElementDemoViewModel.cs index f5135270..7572054b 100644 --- a/src/Shared/HandyControlDemo_Shared/ViewModel/Common/InputElementDemoViewModel.cs +++ b/src/Shared/HandyControlDemo_Shared/ViewModel/Common/InputElementDemoViewModel.cs @@ -108,12 +108,12 @@ public class InputElementDemoViewModel : ViewModelBase SelectedDataList = DataList.Where((t, i) => i % 2 == 0).ToList(); } - private void Search(string key) + private static void Search(string key) { Growl.Info(key); } - private List GetComboBoxDemoDataList() + private static List GetComboBoxDemoDataList() { var converter = new StringRepeatConverter(); var list = new List(); diff --git a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ComboBoxBaseStyle.xaml b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ComboBoxBaseStyle.xaml index 54191f44..c86dac35 100644 --- a/src/Shared/HandyControl_Shared/Themes/Styles/Base/ComboBoxBaseStyle.xaml +++ b/src/Shared/HandyControl_Shared/Themes/Styles/Base/ComboBoxBaseStyle.xaml @@ -517,7 +517,7 @@ - + diff --git a/src/Shared/HandyControl_Shared/Themes/Theme.xaml b/src/Shared/HandyControl_Shared/Themes/Theme.xaml index 653fdb41..9489abc8 100644 --- a/src/Shared/HandyControl_Shared/Themes/Theme.xaml +++ b/src/Shared/HandyControl_Shared/Themes/Theme.xaml @@ -5662,7 +5662,7 @@ - +