Files
Shrlalgo.RvKits/Wpf.Ui.Extend/Controls/MultiTreeView/MultiTreeView.xaml
2024-09-22 11:05:41 +08:00

203 lines
12 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="http://schemas.lepo.co/wpfui/2022/xaml"
xmlns:exc="clr-namespace:Wpf.Ui.Extend.Controls">
<!-- 合并其他的资源字典 -->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Wpf.Ui;component/Controls/TreeView/TreeViewItem.xaml" />
<!--<ResourceDictionary Source="pack://application:,,,/Wpf.Ui;component/Controls/CheckBox/CheckBox.xaml" />-->
</ResourceDictionary.MergedDictionaries>
<!-- 定义MultiTreeViewItem的样式 -->
<Style x:Key="DefaultMultiTreeViewItemStyle" TargetType="{x:Type exc:MultiTreeViewItem}">
<!-- 设置前景色、背景色、边框圆角、字体大小等属性 -->
<Setter Property="Foreground" Value="{DynamicResource TreeViewItemForeground}" />
<Setter Property="Background" Value="{DynamicResource TreeViewItemBackground}" />
<Setter Property="Padding" Value="4" />
<Setter Property="Border.CornerRadius" Value="{DynamicResource ControlCornerRadius}" />
<Setter Property="FontSize" Value="{StaticResource TreeViewItemFontSize}" />
<!-- 设置焦点样式、是否对设备像素进行对齐、是否是Tab停止点、是否覆盖默认样式等属性 -->
<Setter Property="FrameworkElement.FocusVisualStyle" Value="{DynamicResource DefaultControlFocusVisualStyle}" />
<Setter Property="UIElement.SnapsToDevicePixels" Value="True" />
<Setter Property="IsTabStop" Value="True" />
<Setter Property="FrameworkElement.OverridesDefaultStyle" Value="True" />
<!-- 定义模板 -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type exc:MultiTreeViewItem}">
<!-- 定义网格布局 -->
<Grid Background="{TemplateBinding Background}">
<!-- 定义列和行 -->
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 定义边框,包含一个可展开/折叠的切换按钮、一个复选框和一个内容呈现器 -->
<Border
x:Name="Border"
Padding="{TemplateBinding Padding}"
HorizontalAlignment="Stretch"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding Border.CornerRadius}"
SnapsToDevicePixels="True">
<Grid>
<Grid.ColumnDefinitions>
<!-- 缩进 -->
<ColumnDefinition Width="19" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox
x:Name="SelectionBox"
Grid.Column="1"
IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" />
<ToggleButton
x:Name="Expander"
Grid.Column="2"
ClickMode="Press"
IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
Style="{StaticResource ExpandCollapseToggleButtonStyle}" />
<ContentPresenter
Name="PART_Header"
Grid.Column="3"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="Center"
ContentSource="Header"
TextElement.FontSize="{TemplateBinding FontSize}" />
</Grid>
</Border>
<!-- 定义子项的呈现器 -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="19" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ItemsPresenter
Name="ItemsHost"
Grid.Column="1"
Grid.ColumnSpan="4"
HorizontalAlignment="Stretch"
Visibility="Collapsed" />
</Grid>
</Grid>
<!-- 定义触发器,用于改变在特定条件下的视觉效果 -->
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="True">
<Setter TargetName="ItemsHost" Property="Visibility" Value="Visible" />
</Trigger>
<Trigger Property="HasItems" Value="False">
<Setter TargetName="Expander" Property="Visibility" Value="Hidden" />
</Trigger>
<Trigger Property="UIElement.IsMouseOver" Value="True">
<Setter TargetName="Border" Property="Background" Value="{DynamicResource TreeViewItemBackgroundPointerOver}" />
</Trigger>
<!--<Trigger Property="exc:MultiTreeView.IsItemSelected" Value="true">-->
<Trigger Property="IsChecked" Value="true">
<Setter TargetName="Border" Property="Background" Value="{DynamicResource TreeViewItemBackgroundSelected}" />
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="Border" Property="Background" Value="{DynamicResource TreeViewItemBackgroundSelected}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="HasHeader" Value="False" />
<Condition Property="Width" Value="Auto" />
</MultiTrigger.Conditions>
<Setter TargetName="PART_Header" Property="MinWidth" Value="75" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="HasHeader" Value="False" />
<Condition Property="Height" Value="Auto" />
</MultiTrigger.Conditions>
<Setter TargetName="PART_Header" Property="MinHeight" Value="19" />
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource ControlFillColorDisabledBrush}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<!-- 定义样式触发器,用于改变在特定条件下的样式 -->
<Style.Triggers>
<Trigger Property="VirtualizingPanel.IsVirtualizing" Value="true">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<!-- 定义MultiTreeView的样式 -->
<Style x:Key="DefaultMultiTreeViewStyle" TargetType="{x:Type exc:MultiTreeView}">
<!-- 定义样式触发器,用于改变在特定条件下的样式 -->
<Style.Triggers>
<Trigger Property="VirtualizingPanel.IsVirtualizing" Value="True">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
<!-- 设置前景色、背景色、边框颜色、边距、填充、边框厚度等属性 -->
<Setter Property="FrameworkElement.FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Foreground" Value="{DynamicResource TreeViewItemForeground}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="Margin" Value="0" />
<Setter Property="Padding" Value="0" />
<Setter Property="BorderThickness" Value="1" />
<!-- 设置滚动条的可见性和内容滚动的能力 -->
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.CanContentScroll" Value="True" />
<!-- 设置是否覆盖默认样式、是否对设备像素进行对齐等属性 -->
<Setter Property="FrameworkElement.OverridesDefaultStyle" Value="True" />
<Setter Property="UIElement.SnapsToDevicePixels" Value="True" />
<!-- 定义模板 -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type exc:MultiTreeView}">
<!-- 定义触发器,用于改变在特定条件下的视觉效果 -->
<ControlTemplate.Triggers>
<Trigger Property="VirtualizingPanel.IsVirtualizing" Value="True">
<Setter TargetName="ItemsPresenterScrollViewer" Property="ScrollViewer.CanContentScroll" Value="True" />
</Trigger>
</ControlTemplate.Triggers>
<!-- 定义边框,包含一个滚动视图,滚动视图中包含了所有的树视图项 -->
<Border
Name="Border"
Padding="0"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="4">
<controls:PassiveScrollViewer
Name="ItemsPresenterScrollViewer"
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
ScrollViewer.CanContentScroll="False"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
<ItemsPresenter Margin="{TemplateBinding Padding}" />
</controls:PassiveScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style BasedOn="{StaticResource DefaultMultiTreeViewItemStyle}" TargetType="{x:Type exc:MultiTreeViewItem}" />
<!-- 基于DefaultMultiTreeViewStyle的样式应用于MultiTreeView -->
<Style BasedOn="{StaticResource DefaultMultiTreeViewStyle}" TargetType="{x:Type exc:MultiTreeView}" />
</ResourceDictionary>