feat: add avalonia basic ComboBox style.

This commit is contained in:
NaBian committed 2025-08-25 23:14:42 +08:00
1 parent d4406c2888
commit 94ee336714
12 files changed
+593 -8

No files matched your search

@@ -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", "", "" ],
@@ -0,0 +1,101 @@
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:vm="clr-namespace:HandyControlDemo.ViewModel"
x:Class="HandyControlDemo.UserControl.ComboBoxDemo"
DataContext="{Binding InputElementDemo, Source={x:Static vm:ViewModelLocator.Instance}}">
<ScrollViewer>
<hc:UniformSpacingPanel Spacing="32"
Margin="32"
ChildWrapping="Wrap">
<StackPanel>
<ComboBox ItemsSource="{Binding DataList}" />
<ComboBox ItemsSource="{Binding DataList}"
Margin="0,16,0,0"
IsEnabled="False" />
<ComboBox hc:TitleElement.Title="This is the title"
Theme="{StaticResource ComboBoxExtend}"
Margin="0,32,0,0"
ItemsSource="{Binding DataList}" />
<ComboBox hc:TitleElement.Title="This is the title"
hc:InfoElement.ShowClearButton="True"
Theme="{StaticResource ComboBoxExtend}"
Margin="0,32,0,0"
ItemsSource="{Binding DataList}" />
<ComboBox hc:TitleElement.Title="This is the title"
Theme="{StaticResource ComboBoxExtend}"
Margin="0,16,0,0"
ItemsSource="{Binding DataList}"
IsEnabled="False" />
<ComboBox PlaceholderText="Please enter content"
ItemsSource="{Binding DataList}"
hc:TitleElement.Title="This item must be filled in"
Theme="{StaticResource ComboBoxExtend}"
hc:InfoElement.Necessary="True"
Margin="0,16,0,0" />
<ComboBox Width="380"
hc:TitleElement.TitleWidth="120"
hc:TitleElement.TitlePlacement="Left"
hc:TitleElement.Title="The title is on the left"
Theme="{StaticResource ComboBoxExtend}"
Margin="0,32,0,0"
ItemsSource="{Binding DataList}" />
<ComboBox Width="380"
ItemsSource="{Binding DataList}"
hc:TitleElement.TitleWidth="120"
PlaceholderText="Please enter content"
hc:TitleElement.TitlePlacement="Left"
hc:TitleElement.Title="The title is on the left"
hc:InfoElement.Necessary="True"
Theme="{StaticResource ComboBoxExtend}"
Margin="0,16,0,0" />
</StackPanel>
<StackPanel>
<ComboBox ItemsSource="{Binding DataList}"
Theme="{StaticResource ComboBox.Small}" />
<ComboBox ItemsSource="{Binding DataList}"
Margin="0,16,0,0"
IsEnabled="False"
Theme="{StaticResource ComboBox.Small}" />
<ComboBox hc:TitleElement.Title="This is the title"
Theme="{StaticResource ComboBoxExtend.Small}"
Margin="0,32,0,0"
ItemsSource="{Binding DataList}" />
<ComboBox hc:TitleElement.Title="This is the title"
hc:InfoElement.ShowClearButton="True"
Theme="{StaticResource ComboBoxExtend.Small}"
Margin="0,32,0,0"
ItemsSource="{Binding DataList}" />
<ComboBox hc:TitleElement.Title="This is the title"
Theme="{StaticResource ComboBoxExtend.Small}"
Margin="0,16,0,0"
ItemsSource="{Binding DataList}"
IsEnabled="False" />
<ComboBox PlaceholderText="Please enter content"
ItemsSource="{Binding DataList}"
hc:TitleElement.Title="This item must be filled in"
Theme="{StaticResource ComboBoxExtend.Small}"
hc:InfoElement.Necessary="True"
Margin="0,16,0,0" />
<ComboBox Width="380"
hc:TitleElement.TitleWidth="120"
hc:TitleElement.TitlePlacement="Left"
hc:TitleElement.Title="The title is on the left"
Theme="{StaticResource ComboBoxExtend.Small}"
Margin="0,32,0,0"
ItemsSource="{Binding DataList}" />
<ComboBox Width="380"
ItemsSource="{Binding DataList}"
hc:TitleElement.TitleWidth="120"
PlaceholderText="Please enter content"
hc:TitleElement.TitlePlacement="Left"
hc:TitleElement.Title="The title is on the left"
hc:InfoElement.Necessary="True"
Theme="{StaticResource ComboBoxExtend.Small}"
Margin="0,16,0,0" />
</StackPanel>
</hc:UniformSpacingPanel>
</ScrollViewer>
</UserControl>
@@ -0,0 +1,10 @@
namespace HandyControlDemo.UserControl;
public partial class ComboBoxDemo : Avalonia.Controls.UserControl
{
public ComboBoxDemo()
{
InitializeComponent();
}
}
@@ -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<string>? _dataList;
public InputElementDemoViewModel()
{
DataList = GetComboBoxDemoDataList();
}
private static List<string> GetComboBoxDemoDataList()
{
var converter = new StringRepeatConverter();
var list = new List<string>();
for (int i = 1; i <= 9; i++)
{
list.Add($"{converter.Convert(Lang.Text, null!, i, CultureInfo.CurrentCulture)}{i}");
}
return list;
}
}
@@ -0,0 +1,444 @@
<ResourceDictionary xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="clr-namespace:HandyControl.Controls"
xmlns:system="clr-namespace:System;assembly=System.Runtime">
<ControlTheme x:Key="ComboBoxItemBaseStyle"
TargetType="ComboBoxItem">
<Setter Property="Padding"
Value="{StaticResource DefaultControlPadding}" />
<Setter Property="Background"
Value="Transparent" />
<Setter Property="BorderBrush"
Value="Transparent" />
<Setter Property="BorderThickness"
Value="0" />
<Setter Property="MinHeight"
Value="{StaticResource DefaultControlHeight}" />
<Setter Property="CornerRadius"
Value="{Binding $self.(hc:BorderElement.CornerRadius)}" />
<Setter Property="Template">
<ControlTemplate>
<ContentPresenter Name="PART_ContentPresenter"
Foreground="{TemplateBinding Foreground}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding CornerRadius}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Content="{TemplateBinding Content}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
Padding="{TemplateBinding Padding}" />
</ControlTemplate>
</Setter>
<Style Selector="^:pointerover /template/ ContentPresenter">
<Setter Property="Background"
Value="{DynamicResource SecondaryRegionBrush}" />
</Style>
<Style Selector="^:selected /template/ ContentPresenter">
<Setter Property="Background"
Value="{DynamicResource PrimaryBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource TextIconBrush}" />
</Style>
</ControlTheme>
<ControlTheme x:Key="ComboBoxBaseStyle"
TargetType="ComboBox">
<Setter Property="ItemContainerTheme"
Value="{StaticResource ComboBoxItemBaseStyle}" />
<Setter Property="hc:TitleElement.MarginOnTheLeft"
Value="0,7,6,0" />
<Setter Property="hc:TitleElement.MarginOnTheTop"
Value="8,0,0,5" />
<Setter Property="hc:TitleElement.HorizontalAlignment"
Value="Left" />
<Setter Property="hc:BorderElement.CornerRadius"
Value="{StaticResource DefaultCornerRadius}" />
<Setter Property="CornerRadius"
Value="{Binding $self.(hc:BorderElement.CornerRadius)}" />
<Setter Property="MinHeight"
Value="{StaticResource DefaultControlHeight}" />
<Setter Property="Padding"
Value="{StaticResource DefaultInputPadding}" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="HorizontalContentAlignment"
Value="Left" />
<Setter Property="Background"
Value="{DynamicResource RegionBrush}" />
<Setter Property="BorderBrush"
Value="{DynamicResource BorderBrush}" />
<Setter Property="Foreground"
Value="{DynamicResource PrimaryTextBrush}" />
<Setter Property="BorderThickness"
Value="1" />
<Setter Property="FocusAdorner"
Value="{x:Null}" />
<Setter Property="MaxDropDownHeight"
Value="504" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility"
Value="Disabled" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility"
Value="Auto" />
<Setter Property="PlaceholderForeground"
Value="{DynamicResource ThirdlyTextBrush}" />
<Setter Property="Template">
<ControlTemplate>
<DataValidationErrors>
<Grid ColumnDefinitions="*,Auto">
<Border x:Name="border"
Grid.ColumnSpan="2"
CornerRadius="{TemplateBinding CornerRadius}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" />
<TextBlock Grid.Column="0"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="{TemplateBinding Padding}"
IsVisible="{TemplateBinding SelectionBoxItem, Converter={x:Static ObjectConverters.IsNull}}"
HorizontalAlignment="Stretch"
Theme="{StaticResource TextBlockDefaultThiLight}"
Text="{TemplateBinding PlaceholderText}" />
<ContentControl x:Name="ContentPresenter"
Content="{TemplateBinding SelectionBoxItem}"
Grid.Column="0"
Margin="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
<Path Grid.Column="1"
IsVisible="{TemplateBinding IsDropDownOpen, Converter={x:Static BoolConverters.Not}}"
Data="{StaticResource DownGeometry}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Width="14"
Stretch="Uniform"
Fill="{Binding BorderBrush, ElementName=border}"
Margin="{TemplateBinding Padding, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='0,0,1,0'}" />
<Path Grid.Column="1"
IsVisible="{TemplateBinding IsDropDownOpen}"
Data="{StaticResource UpGeometry}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Width="14"
Stretch="Uniform"
Fill="{Binding BorderBrush, ElementName=border}"
Margin="{TemplateBinding Padding, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='0,0,1,0'}" />
<Popup Grid.Column="0"
Name="PART_Popup"
WindowManagerAddShadowHint="False"
IsOpen="{TemplateBinding IsDropDownOpen, Mode=TwoWay}"
PlacementTarget="border"
IsLightDismissEnabled="True"
InheritsTransform="True">
<Border x:Name="PopupBorder"
Background="{DynamicResource RegionBrush}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="0,1,0,0"
MinWidth="{Binding Bounds.Width, RelativeSource={RelativeSource TemplatedParent}}"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
Margin="8,0,8,8"
Effect="{StaticResource EffectShadow2}"
HorizontalAlignment="Stretch"
CornerRadius="{TemplateBinding CornerRadius}">
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
Margin="2">
<ItemsPresenter Name="PART_ItemsPresenter"
ItemsPanel="{TemplateBinding ItemsPanel}" />
</ScrollViewer>
</Border>
</Popup>
</Grid>
</DataValidationErrors>
</ControlTemplate>
</Setter>
<Style Selector="^:disabled">
<Setter Property="Opacity"
Value="0.4" />
</Style>
<Style Selector="^:pointerover /template/ Border#border">
<Setter Property="BorderBrush"
Value="{DynamicResource SecondaryBorderBrush}" />
</Style>
<Style Selector="^:focus">
<Style Selector="^:pointerover /template/ Border#border">
<Setter Property="BorderBrush"
Value="{DynamicResource PrimaryBrush}" />
</Style>
<Setter Property="BorderBrush"
Value="{DynamicResource PrimaryBrush}" />
</Style>
<Style Selector="^:dropdownopen">
<Setter Property="BorderBrush"
Value="{DynamicResource PrimaryBrush}" />
</Style>
<Style Selector="^:error /template/ Border#border">
<Setter Property="BorderBrush"
Value="{DynamicResource DangerBrush}" />
</Style>
</ControlTheme>
<ControlTemplate x:Key="ComboBoxExtendTopTemplate"
TargetType="ComboBox">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition MinHeight="{Binding Path=(hc:InfoElement.MinContentHeight), RelativeSource={RelativeSource TemplatedParent}}"
Height="{Binding Path=(hc:InfoElement.ContentHeight), RelativeSource={RelativeSource TemplatedParent},Converter={StaticResource Double2GridLengthConverter}}" />
</Grid.RowDefinitions>
<DockPanel LastChildFill="True"
IsHitTestVisible="False"
IsVisible="{Binding Path=(hc:TitleElement.Title), RelativeSource={RelativeSource TemplatedParent},Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
HorizontalAlignment="{Binding Path=(hc:TitleElement.HorizontalAlignment), RelativeSource={RelativeSource TemplatedParent}}"
Margin="{Binding Path=(hc:TitleElement.MarginOnTheTop), RelativeSource={RelativeSource TemplatedParent}}">
<ContentPresenter DockPanel.Dock="Right"
TextElement.Foreground="{DynamicResource DangerBrush}"
Margin="4,0,0,0"
Content="{Binding Path=(hc:InfoElement.Symbol), RelativeSource={RelativeSource TemplatedParent}}"
IsVisible="{Binding Path=(hc:InfoElement.Necessary), RelativeSource={RelativeSource TemplatedParent}}" />
<TextBlock TextWrapping="NoWrap"
TextTrimming="CharacterEllipsis"
Text="{Binding Path=(hc:TitleElement.Title), RelativeSource={RelativeSource TemplatedParent}}" />
</DockPanel>
<DataValidationErrors Grid.Row="1">
<Grid ColumnDefinitions="*,Auto">
<Border x:Name="border"
Grid.ColumnSpan="2"
CornerRadius="{TemplateBinding CornerRadius}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" />
<TextBlock Grid.Column="0"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="{TemplateBinding Padding}"
IsVisible="{TemplateBinding SelectionBoxItem, Converter={x:Static ObjectConverters.IsNull}}"
HorizontalAlignment="Stretch"
Theme="{StaticResource TextBlockDefaultThiLight}"
Text="{TemplateBinding PlaceholderText}" />
<ContentControl x:Name="ContentPresenter"
Content="{TemplateBinding SelectionBoxItem}"
Grid.Column="0"
Margin="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
<Path Grid.Column="1"
IsVisible="{TemplateBinding IsDropDownOpen, Converter={x:Static BoolConverters.Not}}"
Data="{StaticResource DownGeometry}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Width="14"
Stretch="Uniform"
Fill="{Binding BorderBrush, ElementName=border}"
Margin="{TemplateBinding Padding, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='0,0,1,0'}" />
<Path Grid.Column="1"
IsVisible="{TemplateBinding IsDropDownOpen}"
Data="{StaticResource UpGeometry}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Width="14"
Stretch="Uniform"
Fill="{Binding BorderBrush, ElementName=border}"
Margin="{TemplateBinding Padding, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='0,0,1,0'}" />
<Popup Grid.Column="0"
Name="PART_Popup"
WindowManagerAddShadowHint="False"
IsOpen="{TemplateBinding IsDropDownOpen, Mode=TwoWay}"
PlacementTarget="border"
IsLightDismissEnabled="True"
InheritsTransform="True">
<Border x:Name="PopupBorder"
Background="{DynamicResource RegionBrush}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="0,1,0,0"
MinWidth="{Binding Bounds.Width, RelativeSource={RelativeSource TemplatedParent}}"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
Margin="8,0,8,8"
Effect="{StaticResource EffectShadow2}"
HorizontalAlignment="Stretch"
CornerRadius="{TemplateBinding CornerRadius}">
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
Margin="2">
<ItemsPresenter Name="PART_ItemsPresenter"
ItemsPanel="{TemplateBinding ItemsPanel}" />
</ScrollViewer>
</Border>
</Popup>
</Grid>
</DataValidationErrors>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="ComboBoxExtendLeftTemplate"
TargetType="ComboBox">
<Grid MinHeight="{Binding Path=(hc:InfoElement.MinContentHeight), RelativeSource={RelativeSource TemplatedParent}}"
Height="{Binding Path=(hc:InfoElement.ContentHeight), RelativeSource={RelativeSource TemplatedParent}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding Path=(hc:TitleElement.TitleWidth), RelativeSource={RelativeSource TemplatedParent}}" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<DockPanel LastChildFill="True"
IsHitTestVisible="False"
IsVisible="{Binding Path=(hc:TitleElement.Title), RelativeSource={RelativeSource TemplatedParent},Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
HorizontalAlignment="{Binding Path=(hc:TitleElement.HorizontalAlignment), RelativeSource={RelativeSource TemplatedParent}}"
VerticalAlignment="{Binding Path=(hc:TitleElement.VerticalAlignment), RelativeSource={RelativeSource TemplatedParent}}"
Margin="{Binding Path=(hc:TitleElement.MarginOnTheLeft), RelativeSource={RelativeSource TemplatedParent}}">
<ContentPresenter DockPanel.Dock="Right"
TextElement.Foreground="{DynamicResource DangerBrush}"
Margin="4,0,0,0"
Content="{Binding Path=(hc:InfoElement.Symbol), RelativeSource={RelativeSource TemplatedParent}}"
IsVisible="{Binding Path=(hc:InfoElement.Necessary), RelativeSource={RelativeSource TemplatedParent}}" />
<TextBlock TextWrapping="NoWrap"
TextTrimming="CharacterEllipsis"
Text="{Binding Path=(hc:TitleElement.Title), RelativeSource={RelativeSource TemplatedParent}}" />
</DockPanel>
<DataValidationErrors Grid.Column="1">
<Grid ColumnDefinitions="*,Auto">
<Border x:Name="border"
Grid.ColumnSpan="2"
CornerRadius="{TemplateBinding CornerRadius}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" />
<TextBlock Grid.Column="0"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="{TemplateBinding Padding}"
IsVisible="{TemplateBinding SelectionBoxItem, Converter={x:Static ObjectConverters.IsNull}}"
HorizontalAlignment="Stretch"
Theme="{StaticResource TextBlockDefaultThiLight}"
Text="{TemplateBinding PlaceholderText}" />
<ContentControl x:Name="ContentPresenter"
Content="{TemplateBinding SelectionBoxItem}"
Grid.Column="0"
Margin="{TemplateBinding Padding}"
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" />
<Path Grid.Column="1"
IsVisible="{TemplateBinding IsDropDownOpen, Converter={x:Static BoolConverters.Not}}"
Data="{StaticResource DownGeometry}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Width="14"
Stretch="Uniform"
Fill="{Binding BorderBrush, ElementName=border}"
Margin="{TemplateBinding Padding, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='0,0,1,0'}" />
<Path Grid.Column="1"
IsVisible="{TemplateBinding IsDropDownOpen}"
Data="{StaticResource UpGeometry}"
VerticalAlignment="Center"
HorizontalAlignment="Right"
Width="14"
Stretch="Uniform"
Fill="{Binding BorderBrush, ElementName=border}"
Margin="{TemplateBinding Padding, Converter={StaticResource ThicknessSplitConverter}, ConverterParameter='0,0,1,0'}" />
<Popup Grid.Column="0"
Name="PART_Popup"
WindowManagerAddShadowHint="False"
IsOpen="{TemplateBinding IsDropDownOpen, Mode=TwoWay}"
PlacementTarget="border"
IsLightDismissEnabled="True"
InheritsTransform="True">
<Border x:Name="PopupBorder"
Background="{DynamicResource RegionBrush}"
BorderBrush="{DynamicResource BorderBrush}"
BorderThickness="0,1,0,0"
MinWidth="{Binding Bounds.Width, RelativeSource={RelativeSource TemplatedParent}}"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
Margin="8,0,8,8"
Effect="{StaticResource EffectShadow2}"
HorizontalAlignment="Stretch"
CornerRadius="{TemplateBinding CornerRadius}">
<ScrollViewer HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}"
Margin="2">
<ItemsPresenter Name="PART_ItemsPresenter"
ItemsPanel="{TemplateBinding ItemsPanel}" />
</ScrollViewer>
</Border>
</Popup>
</Grid>
</DataValidationErrors>
</Grid>
</ControlTemplate>
<ControlTheme x:Key="ComboBoxExtendBaseStyle"
BasedOn="{StaticResource ComboBoxBaseStyle}"
TargetType="ComboBox">
<Setter Property="hc:InfoElement.Symbol"
Value="●" />
<Setter Property="hc:InfoElement.ContentHeight"
Value="{x:Static system:Double.NaN}" />
<Setter Property="hc:InfoElement.MinContentHeight"
Value="{StaticResource DefaultControlHeight}" />
<Setter Property="Template"
Value="{StaticResource ComboBoxExtendTopTemplate}" />
<Style Selector="^[(hc|TitleElement.TitlePlacement)=Left]">
<Setter Property="Template"
Value="{StaticResource ComboBoxExtendLeftTemplate}" />
</Style>
</ControlTheme>
<ControlTheme x:Key="{x:Type ComboBox}"
BasedOn="{StaticResource ComboBoxBaseStyle}"
TargetType="ComboBox" />
<ControlTheme x:Key="ComboBoxItem.Small"
BasedOn="{StaticResource ComboBoxItemBaseStyle}"
TargetType="ComboBoxItem">
<Setter Property="Padding"
Value="6,0" />
<Setter Property="MinHeight"
Value="20" />
</ControlTheme>
<ControlTheme x:Key="ComboBox.Small"
BasedOn="{StaticResource ComboBoxBaseStyle}"
TargetType="ComboBox">
<Setter Property="ItemContainerTheme"
Value="{StaticResource ComboBoxItem.Small}" />
<Setter Property="MinHeight"
Value="20" />
<Setter Property="Padding"
Value="6,0" />
</ControlTheme>
<ControlTheme x:Key="ComboBoxExtend"
BasedOn="{StaticResource ComboBoxExtendBaseStyle}"
TargetType="ComboBox" />
<ControlTheme x:Key="ComboBoxExtend.Small"
BasedOn="{StaticResource ComboBoxExtend}"
TargetType="ComboBox">
<Setter Property="ItemContainerTheme"
Value="{StaticResource ComboBoxItem.Small}" />
<Setter Property="hc:InfoElement.MinContentHeight"
Value="20" />
<Setter Property="hc:InfoElement.ContentHeight"
Value="20" />
<Setter Property="hc:TitleElement.MarginOnTheLeft"
Value="0,3,6,0" />
<Setter Property="hc:TitleElement.MarginOnTheTop"
Value="6,0,0,1" />
<Setter Property="Padding"
Value="6,0" />
<Setter Property="MinHeight"
Value="20" />
</ControlTheme>
</ResourceDictionary>
@@ -48,6 +48,12 @@
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}" />
<TextBlock VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="{TemplateBinding Padding}"
IsVisible="{TemplateBinding Text, Converter={x:Static StringConverters.IsNullOrEmpty}}"
HorizontalAlignment="Stretch"
Theme="{StaticResource TextBlockDefaultThiLight}"
Text="{TemplateBinding Watermark}" />
<ScrollViewer Name="PART_ScrollViewer"
AllowAutoHide="{TemplateBinding (ScrollViewer.AllowAutoHide)}"
BringIntoViewOnFocusChange="{TemplateBinding (ScrollViewer.BringIntoViewOnFocusChange)}"
@@ -41,6 +41,7 @@
<MergeResourceInclude Source="/Themes/Styles/TextBox.axaml" />
<MergeResourceInclude Source="/Themes/Styles/ButtonSpinner.axaml" />
<MergeResourceInclude Source="/Themes/Styles/NumericUpDown.axaml" />
<MergeResourceInclude Source="/Themes/Styles/ComboBox.axaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Styles.Resources>
@@ -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">
<!--默认下拉框模板-->
<ControlTemplate x:Key="ComboBoxTemplate" TargetType="ComboBox">
<Grid>
@@ -478,7 +478,7 @@
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource PrimaryBrush}"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Foreground" Value="{DynamicResource TextIconBrush}"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
@@ -5620,7 +5620,7 @@
<Condition Property="IsSelected" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource PrimaryBrush}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Foreground" Value="{DynamicResource TextIconBrush}" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
@@ -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<string> GetComboBoxDemoDataList()
private static List<string> GetComboBoxDemoDataList()
{
var converter = new StringRepeatConverter();
var list = new List<string>();
@@ -517,7 +517,7 @@
<Condition Property="IsSelected" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource PrimaryBrush}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Foreground" Value="{DynamicResource TextIconBrush}" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
@@ -5662,7 +5662,7 @@
<Condition Property="IsSelected" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource PrimaryBrush}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Foreground" Value="{DynamicResource TextIconBrush}" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>