Files
Shrlalgo.RvKits/WPFluent/Controls/CheckComboBox/CheckComboBox.xaml

458 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:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:WPFluent.Controls"
xmlns:converters="clr-namespace:WPFluent.Converters"
xmlns:system="clr-namespace:System;assembly=System.Runtime">
<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="FrameworkElement.FocusVisualStyle" Value="{DynamicResource DefaultControlFocusVisualStyle}" />
<Setter Property="Foreground" Value="{DynamicResource ComboBoxForeground}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Padding" Value="{StaticResource ComboBoxItemContentMargin}" />
<Setter Property="FrameworkElement.Cursor" Value="Hand" />
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
<Setter Property="UIElement.SnapsToDevicePixels" Value="True" />
<Setter Property="FrameworkElement.OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="controls:CheckComboBoxItem">
<Border
x:Name="ContentBorder"
Margin="{DynamicResource ComboBoxItemMargin}"
VerticalAlignment="Stretch"
Background="{TemplateBinding Background}"
CornerRadius="{TemplateBinding Border.CornerRadius}"
SnapsToDevicePixels="True">
<Grid>
<CheckBox
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Content="{TemplateBinding Content}"
IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=controls:CheckComboBoxItem}}">
<CheckBox.Style>
<Style TargetType="CheckBox">
<Style.Setters>
<Setter Property="Margin" Value="{DynamicResource CheckBoxContentMargin}" />
<Setter Property="Background" Value="{DynamicResource CheckBoxBackground}" />
<Setter Property="Foreground" Value="{DynamicResource CheckBoxForeground}" />
<Setter Property="BorderBrush" Value="{DynamicResource CheckBoxBorderBrush}" />
<Setter Property="BorderThickness" Value="{StaticResource CheckBoxBorderThemeThickness}" />
<Setter Property="Padding" Value="{StaticResource CheckBoxPadding}" />
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
<Setter Property="FrameworkElement.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="UIElement.SnapsToDevicePixels" Value="True" />
<Setter Property="FrameworkElement.OverridesDefaultStyle" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<ContentControl VerticalAlignment="Center" Content="{Binding Content, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType=controls:CheckComboBoxItem}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
</CheckBox.Style>
</CheckBox>
<Rectangle
Name="ActiveRectangle"
Width="3"
Height="16"
Margin="0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Fill="{DynamicResource ComboBoxItemPillFillBrush}"
RadiusX="2"
RadiusY="2"
Visibility="Collapsed" />
</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 ComboBoxForegroundDisabled}" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="ContentBorder" Property="Background" Value="{DynamicResource ComboBoxBackgroundPointerOver}" />
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="ActiveRectangle" Property="Visibility" Value="Visible" />
<Setter Property="Foreground" Value="{DynamicResource ComboBoxItemForegroundSelected}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DefaultCheckComboBoxExStyle" TargetType="{x:Type controls:CheckComboBox}">
<Style.Triggers>
<Trigger Property="HeaderPlacement" Value="Left">
<Setter Property="HorizontalAlignment" Value="Right" />
</Trigger>
<Trigger Property="HeaderPlacement" Value="Right">
<Setter Property="HorizontalAlignment" Value="Left" />
</Trigger>
<!--<Trigger Property="MultiSelect" Value="True">
<Setter Property="ItemContainerStyle" Value="{StaticResource DefaultMultiComboxBoxItemStyle}" />
<Setter Property="Template" Value="{StaticResource DefaultMultiComboBoxExControlTemplate}" />
</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 ComboBoxBackground}" />
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
<Setter Property="BorderBrush" Value="{DynamicResource ControlElevationBorderBrush}" />
<Setter Property="BorderThickness" Value="{StaticResource ComboBoxBorderThemeThickness}" />
<Setter Property="FontSize" Value="{DynamicResource ControlContentThemeFontSize}" />
<Setter Property="Foreground" Value="{DynamicResource ComboBoxForeground}" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="MinHeight" Value="{DynamicResource TextControlThemeMinHeight}" />
<Setter Property="MinWidth" Value="{DynamicResource TextControlThemeMinWidth}" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Padding" Value="{DynamicResource 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
x:Name="Header_TextBlock"
Margin="5"
VerticalAlignment="Center"
DockPanel.Dock="{TemplateBinding HeaderPlacement}"
FontSize="{TemplateBinding FontSize}"
Text="{TemplateBinding Header}" />
<Grid
x:Name="Grid"
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
VerticalAlignment="{TemplateBinding VerticalAlignment}">
<!-- 强调边缘 只有IsEditable时出现 -->
<Border
x:Name="AccentBorder"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
BorderBrush="{DynamicResource ComboBoxBorderBrushFocused}"
BorderThickness="{StaticResource ComboBoxAccentBorderThemeThickness}"
CornerRadius="{TemplateBinding Border.CornerRadius}"
Visibility="Collapsed" />
<Border
x:Name="ContentBorder"
Grid.Row="0"
MinWidth="{TemplateBinding MinWidth}"
MinHeight="{TemplateBinding MinHeight}"
Padding="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding Border.CornerRadius}">
<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
x:Name="PlaceholderTextBlock"
Padding="1,0"
VerticalAlignment="Center"
Focusable="False"
FontSize="{TemplateBinding FontSize}"
Foreground="{DynamicResource TextControlPlaceholderForeground}"
IsHitTestVisible="False"
Text="{TemplateBinding PlaceholderText}">
<!-- 控制水印显隐 -->
<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
Name="PART_ContentPresenter"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
IsHitTestVisible="False"
TextElement.Foreground="{TemplateBinding Foreground}" />
</Grid>
<TextBox
x:Name="PART_EditableTextBox"
Grid.Column="0"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
FontSize="{TemplateBinding FontSize}"
Foreground="{TemplateBinding Foreground}"
IsReadOnly="{TemplateBinding IsReadOnly}"
Style="{StaticResource DefaultComboBoxTextBoxStyle}" />
<controls:SymbolIcon
x:Name="ChevronIcon"
Grid.Column="1"
Margin="{StaticResource ComboBoxChevronMargin}"
VerticalAlignment="Center"
FontSize="{StaticResource ComboBoxChevronSize}"
Foreground="{DynamicResource ComboBoxDropDownGlyphForeground}"
RenderTransformOrigin="0.5, 0.5"
Symbol="ChevronDown24">
<controls:SymbolIcon.RenderTransform>
<RotateTransform Angle="0" />
</controls:SymbolIcon.RenderTransform>
</controls:SymbolIcon>
<ToggleButton
Name="ToggleButton"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ClickMode="Press"
Focusable="False"
Foreground="{TemplateBinding Foreground}"
IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
Style="{StaticResource DefaultComboBoxToggleButtonStyle}" />
</Grid>
<!-- 弹出式菜单 -->
<Popup
x:Name="PART_Popup"
MinWidth="{TemplateBinding ActualWidth}"
AllowsTransparency="True"
Focusable="False"
IsOpen="{TemplateBinding IsDropDownOpen}"
Placement="{TemplateBinding Popup.Placement}"
PopupAnimation="{TemplateBinding Popup.PopupAnimation}"
StaysOpen="True"
VerticalOffset="-1">
<Border
x:Name="DropDownBorder"
Padding="0,4,0,6"
Background="{DynamicResource ComboBoxDropDownBackground}"
BorderBrush="{DynamicResource ComboBoxDropDownBorderBrush}"
BorderThickness="1"
CornerRadius="{DynamicResource PopupCornerRadius}"
SnapsToDevicePixels="True"
UseLayoutRounding="True">
<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
Name="FilterPlaceholderTextBlock"
Padding="10,0"
VerticalAlignment="Center"
Foreground="{DynamicResource TextControlPlaceholderForeground}"
IsHitTestVisible="False"
Text="{TemplateBinding FilterBoxPlaceholderText}"
TextBlock.FontSize="{TemplateBinding FontSize}"
Visibility="Collapsed" />
</Grid>
<controls:DynamicScrollViewer
Grid.Row="1"
MaxHeight="{TemplateBinding MaxDropDownHeight}"
Margin="0"
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
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
Storyboard.TargetName="ChevronIcon"
Storyboard.TargetProperty="(controls:SymbolIcon.RenderTransform).(RotateTransform.Angle)"
From="0"
To="180"
Duration="00:00:00.167" />
<DoubleAnimation
Storyboard.TargetName="DropDownBorder"
Storyboard.TargetProperty="(Border.RenderTransform).(TranslateTransform.Y)"
From="-90"
To="0"
Duration="00:00:00.167">
<DoubleAnimation.EasingFunction>
<CircleEase EasingMode="EaseOut" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="ChevronIcon"
Storyboard.TargetProperty="(controls:SymbolIcon.RenderTransform).(RotateTransform.Angle)"
From="180"
To="0"
Duration="00:00:00.167" />
</Storyboard>
</BeginStoryboard>
</Trigger.ExitActions>
</Trigger>
<Trigger SourceName="PART_FilterTextBox" Property="Text" Value="">
<Setter TargetName="FilterPlaceholderTextBlock" Property="Visibility" Value="Visible" />
</Trigger>
<Trigger Property="Header" Value="{x:Null}">
<Setter TargetName="Header_TextBlock" Property="Margin" Value="0" />
<Setter TargetName="Header_TextBlock" Property="Visibility" Value="Collapsed" />
</Trigger>
<!-- 标题左右对齐时,控制最小宽度 -->
<Trigger Property="HeaderPlacement" Value="Left">
<Setter TargetName="Grid" Property="MinWidth" Value="80" />
</Trigger>
<Trigger Property="HeaderPlacement" Value="Right">
<Setter TargetName="Grid" Property="MinWidth" Value="80" />
</Trigger>
<Trigger Property="HasItems" Value="False">
<Setter TargetName="DropDownBorder" Property="MinHeight" Value="{StaticResource ComboBoxPopupMinHeight}" />
</Trigger>
<Trigger SourceName="PART_Popup" Property="Popup.AllowsTransparency" Value="False">
<Setter TargetName="DropDownBorder" Property="CornerRadius" 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 TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible" />
<Setter TargetName="PART_ContentPresenter" Property="Visibility" Value="Hidden" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsKeyboardFocusWithin" Value="True" />
<Condition Property="IsEditable" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="ContentBorder" Property="Background" Value="{DynamicResource ComboBoxBackgroundFocused}" />
<Setter TargetName="AccentBorder" Property="Visibility" Value="Visible" />
</MultiTrigger>
<!-- 可用、指针进入、键盘不聚焦 -->
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsEnabled" Value="True" />
<Condition Property="IsMouseOver" Value="True" />
<Condition Property="IsKeyboardFocusWithin" Value="False" />
</MultiTrigger.Conditions>
<Setter TargetName="ContentBorder" Property="Background" Value="{DynamicResource ComboBoxBackgroundPointerOver}" />
</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 TargetName="ContentBorder" Property="Background" Value="{DynamicResource ComboBoxBackgroundDisabled}" />
<Setter TargetName="ContentBorder" Property="BorderBrush" Value="{DynamicResource ComboBoxBorderBrushDisabled}" />
<Setter Property="Foreground" Value="{DynamicResource ComboBoxForegroundDisabled}" />
<!--#region Extend 水印-->
<Setter TargetName="PlaceholderTextBlock" Property="Foreground" Value="{DynamicResource TextControlForegroundDisabled}" />
<!--#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>