Files
Shrlalgo.RvKits/Melskin/Controls/MultiTreeView.xaml
2026-02-12 21:29:00 +08:00

195 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:controls="clr-namespace:Melskin.Controls"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- 定义MultiTreeViewItem的样式 -->
<Style TargetType="{x:Type controls:MultiTreeViewItem}" x:Key="DefaultMultiTreeViewItemStyle">
<!-- 设置前景色、背景色、边框圆角、字体大小等属性 -->
<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
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="{TemplateBinding Border.CornerRadius}"
HorizontalAlignment="Stretch"
Padding="{TemplateBinding Padding}"
SnapsToDevicePixels="True"
x:Name="Border">
<Grid>
<Grid.ColumnDefinitions>
<!-- 缩进 -->
<ColumnDefinition Width="19" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<CheckBox
Grid.Column="1"
IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
x:Name="SelectionBox" />
<ToggleButton
ClickMode="Press"
Grid.Column="2"
IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
Style="{DynamicResource ExpandCollapseToggleButtonStyle}"
x:Name="Expander" />
<ContentPresenter
ContentSource="Header"
Grid.Column="3"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
Name="PART_Header"
TextElement.FontSize="{TemplateBinding FontSize}"
VerticalAlignment="Center" />
</Grid>
</Border>
<!-- 定义子项的呈现器 -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="19" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ItemsPresenter
Grid.Column="1"
Grid.ColumnSpan="3"
HorizontalAlignment="Stretch"
Name="ItemsHost"
Visibility="Collapsed" />
</Grid>
</Grid>
<!-- 定义触发器,用于改变在特定条件下的视觉效果 -->
<ControlTemplate.Triggers>
<Trigger Property="IsExpanded" Value="True">
<Setter Property="Visibility" TargetName="ItemsHost" Value="Visible" />
</Trigger>
<Trigger Property="HasItems" Value="False">
<Setter Property="Visibility" TargetName="Expander" Value="Hidden" />
</Trigger>
<Trigger Property="UIElement.IsMouseOver" Value="True">
<Setter Property="Background" TargetName="Border" Value="{DynamicResource ControlBackgroundHoverBrush}" />
</Trigger>
<!-- <Trigger Property="exc:MultiTreeView.IsItemSelected" Value="true"> -->
<Trigger Property="IsChecked" Value="true">
<Setter Property="Background" TargetName="Border" Value="{DynamicResource ControlBackgroundSelectedBrush}" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="HasHeader" Value="False" />
<Condition Property="Width" Value="Auto" />
</MultiTrigger.Conditions>
<Setter Property="MinWidth" TargetName="PART_Header" Value="75" />
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="HasHeader" Value="False" />
<Condition Property="Height" Value="Auto" />
</MultiTrigger.Conditions>
<Setter Property="MinHeight" TargetName="PART_Header" 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 TargetType="{x:Type controls:MultiTreeView}" x:Key="DefaultMultiTreeViewStyle">
<!-- 定义样式触发器,用于改变在特定条件下的样式 -->
<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 Property="ScrollViewer.CanContentScroll" TargetName="ItemsPresenterScrollViewer" Value="True" />
</Trigger>
</ControlTemplate.Triggers>
<!-- 定义边框,包含一个滚动视图,滚动视图中包含了所有的树视图项 -->
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="4"
Name="Border"
Padding="0">
<ScrollViewer
CanContentScroll="False"
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
Name="ItemsPresenterScrollViewer"
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>