Files
Shrlalgo.RvKits/WPFluent/Controls/CheckComboBox/CheckComboBox.xaml
ShrlAlgo 4d35cadb56 更新
2025-07-11 09:20:23 +08:00

450 lines
32 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:controls="clr-namespace:WPFluent.Controls"
xmlns:converters="clr-namespace:WPFluent.Converters"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<!--<ResourceDictionary Source="pack://application:,,,/WPFluent;component/Resources/Variables.xaml" />-->
<ResourceDictionary Source="pack://application:,,,/WPFluent;component/Controls/ComboBox/ComboBox.xaml" />
<ResourceDictionary Source="pack://application:,,,/WPFluent;component/Controls/CheckBox/CheckBox.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters:BooleanToVisConverter x:Key="BooleanToVisConverter" />
<converters:StringIsEmptyConverter x:Key="StringIsEmptyConverter" />
<Style TargetType="controls:CheckComboBoxItem">
<Setter Property="FocusVisualStyle" Value="{DynamicResource DefaultControlFocusVisualStyle}" />
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Padding" Value="{StaticResource ComboBoxItemContentMargin}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:CheckComboBoxItem">
<Border
Background="{TemplateBinding Background}"
CornerRadius="{TemplateBinding Border.CornerRadius}"
Margin="{DynamicResource ComboBoxItemMargin}"
SnapsToDevicePixels="True"
VerticalAlignment="Stretch"
x:Name="ContentBorder">
<Grid>
<CheckBox
Content="{TemplateBinding Content}"
HorizontalAlignment="Stretch"
IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=controls:CheckComboBoxItem}}"
VerticalAlignment="Stretch">
<CheckBox.Style>
<Style TargetType="CheckBox">
<Style.Setters>
<Setter Property="Margin" Value="{DynamicResource CheckBoxContentMargin}" />
<Setter Property="Background" Value="{DynamicResource ControlAltFillColorSecondaryBrush}" />
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
<Setter Property="BorderBrush" Value="{DynamicResource ControlStrongStrokeColorDefaultBrush}" />
<Setter Property="BorderThickness" Value="{StaticResource CheckBoxBorderThemeThickness}" />
<Setter Property="Padding" Value="{StaticResource CheckBoxPadding}" />
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="FontSize" Value="{DynamicResource ControlContentThemeFontSize}" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="KeyboardNavigation.IsTabStop" Value="True" />
<Setter Property="Focusable" Value="True" />
<!--<Setter Property="MinWidth" Value="120" />-->
<Setter Property="MinHeight" Value="32" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ContentControl Content="{Binding Content, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=controls:CheckComboBoxItem}}" VerticalAlignment="Center" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</CheckBox.Style>
</CheckBox>
<Rectangle
Fill="{DynamicResource SystemFillColorAttentionBrush}"
Height="16"
HorizontalAlignment="Left"
Margin="0"
Name="ActiveRectangle"
RadiusX="2"
RadiusY="2"
VerticalAlignment="Center"
Visibility="Collapsed"
Width="3" />
</Grid>
</Border>
<ControlTemplate.Triggers>
<!--<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True" />
</Trigger>-->
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{DynamicResource TextFillColorDisabledBrush}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="ContentBorder" Value="{DynamicResource ControlFillColorSecondaryBrush}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Visibility" TargetName="ActiveRectangle" Value="Visible" />
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type controls:CheckComboBox}" x:Key="DefaultCheckComboBoxExStyle">
<Style.Triggers>
<Trigger Property="HeaderPlacement" Value="Left">
<Setter Property="HorizontalAlignment" Value="Right" />
</Trigger>
<Trigger Property="HeaderPlacement" Value="Right">
<Setter Property="HorizontalAlignment" Value="Left" />
</Trigger>
</Style.Triggers>
<!-- Universal WPF UI focus -->
<Setter Property="FocusVisualStyle" Value="{DynamicResource DefaultControlFocusVisualStyle}" />
<!-- Universal WPF UI focus -->
<!-- Universal WPF UI ContextMenu -->
<Setter Property="ContextMenu" Value="{DynamicResource DefaultControlContextMenu}" />
<!-- Universal WPF UI ContextMenu -->
<Setter Property="Background" Value="{DynamicResource ControlFillColorDefaultBrush}" />
<Setter Property="Border.CornerRadius" Value="{StaticResource ControlCornerRadius}" />
<Setter Property="BorderBrush" Value="{DynamicResource ControlElevationBorderBrush}" />
<Setter Property="BorderThickness" Value="{StaticResource ComboBoxBorderThemeThickness}" />
<Setter Property="FontSize" Value="{StaticResource ControlContentThemeFontSize}" />
<Setter Property="Foreground" Value="{DynamicResource TextFillColorPrimaryBrush}" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="MinHeight" Value="{StaticResource TextControlThemeMinHeight}" />
<Setter Property="MinWidth" Value="{StaticResource TextControlThemeMinWidth}" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Padding" Value="{StaticResource ComboBoxPadding}" />
<Setter Property="Popup.Placement" Value="Bottom" />
<Setter Property="Popup.PopupAnimation" Value="Slide" />
<Setter Property="ScrollViewer.CanContentScroll" Value="False" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden" />
<Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden" />
<Setter Property="VerticalAlignment" Value="Center" />
<!-- WPF 不喜欢居中,动画很难看,鼠标按钮有时会立即点击。 -->
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls:CheckComboBox}">
<DockPanel>
<!-- 标题 -->
<TextBlock
DockPanel.Dock="{TemplateBinding HeaderPlacement}"
FontSize="{TemplateBinding FontSize}"
Margin="5"
Text="{TemplateBinding Header}"
VerticalAlignment="Center"
x:Name="Header_TextBlock" />
<Grid
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}"
x:Name="Grid">
<!-- 强调边缘 只有IsEditable时出现 -->
<Border
BorderBrush="{DynamicResource SystemFillColorAttentionBrush}"
BorderThickness="{StaticResource ComboBoxAccentBorderThemeThickness}"
CornerRadius="{TemplateBinding Border.CornerRadius}"
Visibility="Collapsed"
x:Name="AccentBorder" />
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding Border.CornerRadius}"
Grid.Row="0"
MinHeight="{TemplateBinding MinHeight}"
MinWidth="{TemplateBinding MinWidth}"
Padding="0"
x:Name="ContentBorder">
<Grid>
<!--
Chevron 位于 Presenter 上ToggleButton 位于 Chevron 上TextBox 位于 ToggleButton 上。
但是TextBox 不在 Chevron 上,所以 ToggleButton 仍能工作。
后声明在上层
-->
<Grid HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0" Margin="{TemplateBinding Padding}">
<!--#region 扩展水印-->
<TextBlock
Focusable="False"
FontSize="{TemplateBinding FontSize}"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
IsHitTestVisible="False"
Padding="1,0"
Text="{TemplateBinding PlaceholderText}"
VerticalAlignment="Center"
x:Name="PlaceholderTextBlock">
<!-- 控制水印显隐 -->
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Content, ElementName=PART_ContentPresenter, Converter={StaticResource StringIsEmptyConverter}}" Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Content, ElementName=PART_ContentPresenter, Converter={StaticResource StringIsEmptyConverter}}" Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<!--#endregion-->
<ContentPresenter
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
HorizontalAlignment="Stretch"
IsHitTestVisible="False"
Name="PART_ContentPresenter"
TextElement.Foreground="{TemplateBinding Foreground}"
VerticalAlignment="Stretch" />
</Grid>
<TextBox
FontSize="{TemplateBinding FontSize}"
Foreground="{TemplateBinding Foreground}"
Grid.Column="0"
HorizontalAlignment="Stretch"
IsReadOnly="{TemplateBinding IsReadOnly}"
Margin="{TemplateBinding Padding}"
Style="{StaticResource DefaultComboBoxTextBoxStyle}"
VerticalAlignment="Stretch"
x:Name="PART_EditableTextBox" />
<controls:SymbolIcon
FontSize="{StaticResource ComboBoxChevronSize}"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
Grid.Column="1"
Margin="{StaticResource ComboBoxChevronMargin}"
RenderTransformOrigin="0.5, 0.5"
Symbol="ChevronDown24"
VerticalAlignment="Center"
x:Name="ChevronIcon">
<controls:SymbolIcon.RenderTransform>
<RotateTransform Angle="0" />
</controls:SymbolIcon.RenderTransform>
</controls:SymbolIcon>
<ToggleButton
ClickMode="Press"
Focusable="False"
Foreground="{TemplateBinding Foreground}"
Grid.Column="0"
Grid.ColumnSpan="2"
HorizontalAlignment="Stretch"
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
Margin="0"
Name="ToggleButton"
Style="{StaticResource DefaultComboBoxToggleButtonStyle}"
VerticalAlignment="Stretch" />
</Grid>
<!-- 弹出式菜单 -->
<Popup
AllowsTransparency="True"
Focusable="False"
IsOpen="{TemplateBinding IsDropDownOpen}"
MinWidth="{TemplateBinding ActualWidth}"
Placement="{TemplateBinding Popup.Placement}"
PopupAnimation="{TemplateBinding Popup.PopupAnimation}"
StaysOpen="True"
VerticalOffset="-1"
x:Name="PART_Popup">
<Border
Background="{DynamicResource AcrylicBackgroundFillColorDefaultBrush}"
BorderBrush="{DynamicResource SurfaceStrokeColorDefaultBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource PopupCornerRadius}"
Padding="0,4,0,6"
SnapsToDevicePixels="True"
UseLayoutRounding="True"
x:Name="DropDownBorder">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition />
</Grid.RowDefinitions>
<!--<controls:TextBox
x:Name="PART_FilterTextBox"
Margin="5,2,5,2"
PlaceholderText="{TemplateBinding FilterBoxPlaceholderText}"
Visibility="{Binding ShowFilterBox, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisConverter}}" />-->
<Grid Margin="5,2,5,2" Visibility="{Binding ShowFilterBox, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisConverter}}">
<TextBox x:Name="PART_FilterTextBox" />
<TextBlock
FontSize="{TemplateBinding FontSize}"
Foreground="{DynamicResource TextFillColorSecondaryBrush}"
IsHitTestVisible="False"
Name="FilterPlaceholderTextBlock"
Padding="10,0"
Text="{TemplateBinding FilterBoxPlaceholderText}"
VerticalAlignment="Center"
Visibility="Collapsed" />
</Grid>
<controls:DynamicScrollViewer
Grid.Row="1"
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
Margin="0"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
SnapsToDevicePixels="True"
TextElement.FontSize="{TemplateBinding FontSize}"
TextElement.FontWeight="{TemplateBinding FontWeight}"
TextElement.Foreground="{TemplateBinding Foreground}"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
<StackPanel
IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Contained"
TextElement.FontSize="{TemplateBinding FontSize}" />
<!--<ItemsPresenter TextElement.FontSize="{TemplateBinding FontSize}" />-->
</controls:DynamicScrollViewer>
</Grid>
</Border>
</Popup>
</Grid>
</Border>
</Grid>
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsDropDownOpen" Value="True">
<Trigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="00:00:00.167"
From="0"
Storyboard.TargetName="ChevronIcon"
Storyboard.TargetProperty="(controls:SymbolIcon.RenderTransform).(RotateTransform.Angle)"
To="180" />
<DoubleAnimation
Duration="00:00:00.167"
From="-90"
Storyboard.TargetName="DropDownBorder"
Storyboard.TargetProperty="(Border.RenderTransform).(TranslateTransform.Y)"
To="0">
<DoubleAnimation.EasingFunction>
<CircleEase EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Duration="00:00:00.167"
From="180"
Storyboard.TargetName="ChevronIcon"
Storyboard.TargetProperty="(controls:SymbolIcon.RenderTransform).(RotateTransform.Angle)"
To="0" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
<Trigger Property="Text" SourceName="PART_FilterTextBox" Value="">
<Setter Property="Visibility" TargetName="FilterPlaceholderTextBlock" Value="Visible" />
</Trigger>
<Trigger Property="Header" Value="{x:Null}">
<Setter Property="Margin" TargetName="Header_TextBlock" Value="0" />
<Setter Property="Visibility" TargetName="Header_TextBlock" Value="Collapsed" />
</Trigger>
<!-- 标题左右对齐时,控制最小宽度 -->
<Trigger Property="HeaderPlacement" Value="Left">
<Setter Property="MinWidth" TargetName="Grid" Value="80" />
</Trigger>
<Trigger Property="HeaderPlacement" Value="Right">
<Setter Property="MinWidth" TargetName="Grid" Value="80" />
</Trigger>
<Trigger Property="HasItems" Value="False">
<Setter Property="MinHeight" TargetName="DropDownBorder" Value="{StaticResource ComboBoxPopupMinHeight}" />
</Trigger>
<Trigger Property="Popup.AllowsTransparency" SourceName="PART_Popup" Value="False">
<Setter Property="CornerRadius" TargetName="DropDownBorder" Value="0" />
</Trigger>
<Trigger Property="IsGrouping" Value="True">
<Setter Property="ScrollViewer.CanContentScroll" Value="False" />
</Trigger>
<Trigger Property="IsEditable" Value="True">
<Setter Property="IsTabStop" Value="False" />
<Setter Property="Visibility" TargetName="PART_EditableTextBox" Value="Visible" />
<Setter Property="Visibility" TargetName="PART_ContentPresenter" Value="Hidden" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsKeyboardFocusWithin" Value="True" />
<Condition Property="IsEditable" Value="True" />
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="ContentBorder" Value="{DynamicResource ControlFillColorDefaultBrush}" />
<Setter Property="Visibility" TargetName="AccentBorder" Value="Visible" />
</MultiTrigger>
<!-- 可用、指针进入、键盘不聚焦 -->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsKeyboardFocusWithin" Value="False" />
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="ContentBorder" Value="{DynamicResource ControlFillColorSecondaryBrush}" />
</MultiTrigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Cursor" Value="No" />
</Trigger>
<!-- 选中项文本 -->
<!--<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEditable" Value="False" />
<Condition Property="SelectedIndex" Value="-1" />
</MultiTrigger.Conditions>
<Setter TargetName="PlaceholderTextBlock" Property="Visibility" Value="Visible" />
</MultiTrigger>-->
<!--<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="PlaceholderEnable" Value="True" />
<Condition Property="Text" Value="" />
</MultiTrigger.Conditions>
<Setter TargetName="PlaceholderTextBlock" Property="Visibility" Value="Visible" />
</MultiTrigger>-->
<!--<Trigger Property="Text" Value="">
<Setter TargetName="PlaceholderTextBlock" Property="Visibility" Value="Visible" />
</Trigger>-->
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="ContentBorder" Value="{DynamicResource ControlFillColorDisabledBrush}" />
<Setter Property="BorderBrush" TargetName="ContentBorder" Value="{DynamicResource ControlStrokeColorDefaultBrush}" />
<Setter Property="Foreground" Value="{DynamicResource TextFillColorDisabledBrush}" />
<!--#region Extend 水印-->
<Setter Property="Foreground" TargetName="PlaceholderTextBlock" Value="{DynamicResource TextFillColorDisabledBrush}" />
<!--#endregion-->
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--<Style BasedOn="{StaticResource DefaultComboBoxItemStyle}" TargetType="{x:Type ComboBoxItem}" />-->
<Style BasedOn="{StaticResource DefaultCheckComboBoxExStyle}" TargetType="{x:Type controls:CheckComboBox}" />
</ResourceDictionary>