TreeView.xaml 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <TreeView x:Class="CustomControls.TreeView"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:local="clr-namespace:System.Windows.Forms"
  5. xmlns:local1="clr-namespace:CustomControls">
  6. <TreeView.Resources>
  7. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.Static.Stroke" Color="#FF262626"/>
  8. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.Static.Fill" Color="#FF595959"/>
  9. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.MouseOver.Stroke" Color="#FF1CC4F7"/>
  10. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.MouseOver.Fill" Color="#FF82DFFB"/>
  11. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.Static.Checked.Stroke" Color="#FF262626"/>
  12. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.Static.Checked.Fill" Color="#FF595959"/>
  13. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.MouseOver.Checked.Stroke" Color="#FF1CC4F7"/>
  14. <SolidColorBrush x:Key="TreeViewItem.TreeArrow.MouseOver.Checked.Fill" Color="#FF82DFFB"/>
  15. <PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 z"/>
  16. <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
  17. <Setter Property="Focusable" Value="False"/>
  18. <Setter Property="Width" Value="16"/>
  19. <Setter Property="Height" Value="16"/>
  20. <Setter Property="Template">
  21. <Setter.Value>
  22. <ControlTemplate TargetType="{x:Type ToggleButton}">
  23. <Border Background="Transparent" Height="16" Padding="5,5,5,5" Width="16">
  24. <Path x:Name="ExpandPath" Data="{StaticResource TreeArrow}" Fill="{StaticResource TreeViewItem.TreeArrow.Static.Fill}" Stroke="{StaticResource TreeViewItem.TreeArrow.Static.Stroke}">
  25. <Path.RenderTransform>
  26. <RotateTransform Angle="135" CenterY="3" CenterX="3"/>
  27. </Path.RenderTransform>
  28. </Path>
  29. </Border>
  30. <ControlTemplate.Triggers>
  31. <Trigger Property="IsChecked" Value="True">
  32. <Setter Property="RenderTransform" TargetName="ExpandPath">
  33. <Setter.Value>
  34. <RotateTransform Angle="180" CenterY="3" CenterX="3"/>
  35. </Setter.Value>
  36. </Setter>
  37. <Setter Property="Fill" TargetName="ExpandPath" Value="{StaticResource TreeViewItem.TreeArrow.Static.Checked.Fill}"/>
  38. <Setter Property="Stroke" TargetName="ExpandPath" Value="{StaticResource TreeViewItem.TreeArrow.Static.Checked.Stroke}"/>
  39. </Trigger>
  40. <Trigger Property="IsMouseOver" Value="True">
  41. <Setter Property="Stroke" TargetName="ExpandPath" Value="{StaticResource TreeViewItem.TreeArrow.MouseOver.Stroke}"/>
  42. <Setter Property="Fill" TargetName="ExpandPath" Value="{StaticResource TreeViewItem.TreeArrow.MouseOver.Fill}"/>
  43. </Trigger>
  44. <MultiTrigger>
  45. <MultiTrigger.Conditions>
  46. <Condition Property="IsMouseOver" Value="True"/>
  47. <Condition Property="IsChecked" Value="True"/>
  48. </MultiTrigger.Conditions>
  49. <Setter Property="Stroke" TargetName="ExpandPath" Value="{StaticResource TreeViewItem.TreeArrow.MouseOver.Checked.Stroke}"/>
  50. <Setter Property="Fill" TargetName="ExpandPath" Value="{StaticResource TreeViewItem.TreeArrow.MouseOver.Checked.Fill}"/>
  51. </MultiTrigger>
  52. </ControlTemplate.Triggers>
  53. </ControlTemplate>
  54. </Setter.Value>
  55. </Setter>
  56. </Style>
  57. </TreeView.Resources>
  58. <TreeView.ItemContainerStyle>
  59. <Style TargetType="{x:Type TreeViewItem}">
  60. <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
  61. <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
  62. <EventSetter Event="Selected" Handler="TreeViewSelectedItemChanged" />
  63. <Setter Property="Template">
  64. <Setter.Value>
  65. <ControlTemplate TargetType="{x:Type TreeViewItem}">
  66. <Grid>
  67. <Grid.ColumnDefinitions>
  68. <ColumnDefinition MinWidth="10" Width="Auto"/>
  69. <ColumnDefinition Width="Auto"/>
  70. <ColumnDefinition Width="*"/>
  71. </Grid.ColumnDefinitions>
  72. <Grid.RowDefinitions>
  73. <RowDefinition Height="Auto"/>
  74. <RowDefinition/>
  75. </Grid.RowDefinitions>
  76. <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
  77. <ContentPresenter x:Name="PART_Header" ContentSource="Header" Grid.Column="1"/>
  78. <ItemsPresenter x:Name="ItemsHost" Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1"/>
  79. </Grid>
  80. <ControlTemplate.Triggers>
  81. <Trigger Property="IsExpanded" Value="false">
  82. <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
  83. </Trigger>
  84. <Trigger Property="HasItems" Value="false">
  85. <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
  86. </Trigger>
  87. <Trigger Property="IsEnabled" Value="false">
  88. <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
  89. </Trigger>
  90. </ControlTemplate.Triggers>
  91. </ControlTemplate>
  92. </Setter.Value>
  93. </Setter>
  94. </Style>
  95. </TreeView.ItemContainerStyle>
  96. <TreeView.ItemTemplate>
  97. <HierarchicalDataTemplate DataType="{x:Type local:TreeNode}" ItemsSource="{Binding Nodes}" >
  98. <StackPanel Orientation="Horizontal" Margin="2,1,2,0">
  99. <CheckBox IsChecked="{Binding IsChecked}" Margin="0,0,5,0" Visibility="{Binding CheckBoxes, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local1:TreeView}}, FallbackValue=Collapsed}"/>
  100. <Image x:Name="PART_Image" Source="{Binding ImageSource}" Margin="0,0,5,0" Width="{Binding ImageSourceWidth}" Height="{Binding ImageSourceHeight}" Visibility="{Binding Images, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local1:TreeView}}, FallbackValue=Visible}"/>
  101. <TextBlock x:Name="PART_TextBlock" Text="{Binding Text}" Padding="1" Background="{Binding BackColorBrush}" Foreground="{Binding ForeColorBrush}" VerticalAlignment="Center"/>
  102. <TextBox x:Name="PART_TextBox" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}" Height="19" Padding="2,1,2,0" Margin="-4,-1,-4,-1" Visibility="Collapsed" IsVisibleChanged="PART_TextBox_IsVisibleChanged" LostFocus="PART_TextBox_LostFocus" KeyDown="PART_TextBox_KeyDown" />
  103. </StackPanel>
  104. <HierarchicalDataTemplate.Triggers>
  105. <DataTrigger Binding="{Binding IsEditing}" Value="true">
  106. <Setter TargetName="PART_TextBlock" Property="Visibility" Value="Collapsed"/>
  107. <Setter TargetName="PART_TextBox" Property="Visibility" Value="Visible"/>
  108. </DataTrigger>
  109. <MultiDataTrigger>
  110. <MultiDataTrigger.Conditions>
  111. <Condition Binding="{Binding IsSelected}" Value="true"/>
  112. <Condition Binding="{Binding IsSelectionActive, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}" Value="true"/>
  113. </MultiDataTrigger.Conditions>
  114. <Setter Property="Background" TargetName="PART_TextBlock" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
  115. <Setter Property="Foreground" TargetName="PART_TextBlock" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
  116. </MultiDataTrigger>
  117. <MultiDataTrigger>
  118. <MultiDataTrigger.Conditions>
  119. <Condition Binding="{Binding IsSelected}" Value="true"/>
  120. <Condition Binding="{Binding IsSelectionActive, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}}}" Value="false"/>
  121. <Condition Binding="{Binding HideSelection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type local1:TreeView}}}" Value="false"/>
  122. </MultiDataTrigger.Conditions>
  123. <Setter Property="Background" TargetName="PART_TextBlock" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/>
  124. <Setter Property="Foreground" TargetName="PART_TextBlock" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/>
  125. </MultiDataTrigger>
  126. </HierarchicalDataTemplate.Triggers>
  127. </HierarchicalDataTemplate>
  128. </TreeView.ItemTemplate>
  129. </TreeView>