Files
ShrlAlgoToolkit/Melskin/Controls/MultiTreeView.xaml
2026-02-20 15:31:44 +08:00

195 lines
12 KiB
XML
Raw Permalink 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:Melskin.Controls">
<!-- 定义MultiTreeViewItem的样式 -->
<Style x:Key="DefaultMultiTreeViewItemStyle" TargetType="{x:Type controls:MultiTreeViewItem}">
<!-- 设置前景色、背景色、边框圆角、字体大小等属性 -->
<Setter Property="Background" Value="{DynamicResource ControlBackgroundNormalBrush}" />
<Setter Property="Border.CornerRadius" Value="4" />
<Setter Property="BorderBrush" Value="{DynamicResource BorderNormalBrush}" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Foreground" Value="{DynamicResource TextPrimaryBrush}" />
<Setter Property="Padding" Value="4,2,0,2" />
<!-- 设置焦点样式、是否对设备像素进行对齐、是否是Tab停止点、是否覆盖默认样式等属性 -->
<Setter Property="FocusVisualStyle" Value="{DynamicResource FocusVisual}" />
<Setter Property="IsTabStop" Value="False" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<!-- 定义模板 -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls: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="{DynamicResource 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="3"
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 ControlBackgroundHoverBrush}" />
</Trigger>
<!-- <Trigger Property="exc:MultiTreeView.IsItemSelected" Value="true"> -->
<Trigger Property="IsChecked" Value="true">
<Setter TargetName="Border" Property="Background" Value="{DynamicResource ControlBackgroundSelectedBrush}" />
</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 TextDisabledBrush}" />
</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 controls: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="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Foreground" Value="{DynamicResource TextPrimaryBrush}" />
<Setter Property="Margin" Value="0" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Padding" Value="0" />
<!-- 设置滚动条的可见性和内容滚动的能力 -->
<Setter Property="ScrollViewer.CanContentScroll" Value="True" />
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
<!-- 设置是否覆盖默认样式、是否对设备像素进行对齐等属性 -->
<Setter Property="SnapsToDevicePixels" Value="True" />
<!-- 定义模板 -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type controls: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">
<ScrollViewer
Name="ItemsPresenterScrollViewer"
CanContentScroll="False"
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
<ItemsPresenter Margin="{TemplateBinding Padding}" />
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style BasedOn="{StaticResource DefaultMultiTreeViewItemStyle}" TargetType="{x:Type controls:MultiTreeViewItem}" />
<!-- 基于DefaultMultiTreeViewStyle的样式应用于MultiTreeView -->
<Style BasedOn="{StaticResource DefaultMultiTreeViewStyle}" TargetType="{x:Type controls:MultiTreeView}" />
</ResourceDictionary>