TreeView.xaml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. <ResourceDictionary
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. mc:Ignorable="d">
  7. <SolidColorBrush x:Key="TreeView_BG_MouseOver" Color="#FFD6DCE5" />
  8. <SolidColorBrush x:Key="TreeView_BG_Select" Color="#FF47A2E7" />
  9. <Style x:Key="TreeViewItemFocusVisual" />
  10. <PathGeometry x:Key="TreeArrow" Figures="M0,0 L0,6 L6,0 z" />
  11. <Style x:Key="ExpandCollapseToggleStyle" TargetType="{x:Type ToggleButton}">
  12. <Setter Property="Focusable" Value="False" />
  13. <Setter Property="Width" Value="20" />
  14. <Setter Property="Height" Value="20" />
  15. <Setter Property="Template">
  16. <Setter.Value>
  17. <ControlTemplate TargetType="{x:Type ToggleButton}">
  18. <Border
  19. Width="20"
  20. Height="20"
  21. Padding="3,0"
  22. Background="#00FFFFFF"
  23. Cursor="Hand">
  24. <Grid>
  25. <Grid
  26. Margin="-5"
  27. Background="Black"
  28. Opacity="0" />
  29. <Path
  30. x:Name="ExpandPath"
  31. Width="12"
  32. Height="12"
  33. HorizontalAlignment="Left"
  34. VerticalAlignment="Center"
  35. Data="{StaticResource TreeArrow}"
  36. Fill="Gray"
  37. Stretch="Uniform">
  38. <Path.RenderTransform>
  39. <RotateTransform Angle="135" CenterX="3" CenterY="3" />
  40. </Path.RenderTransform>
  41. </Path>
  42. </Grid>
  43. </Border>
  44. <ControlTemplate.Triggers>
  45. <Trigger Property="IsMouseOver" Value="True">
  46. <Setter TargetName="ExpandPath" Property="Fill" Value="#FFFFBB00" />
  47. </Trigger>
  48. <Trigger Property="IsChecked" Value="True">
  49. <Setter TargetName="ExpandPath" Property="RenderTransform">
  50. <Setter.Value>
  51. <RotateTransform Angle="180" CenterX="3" CenterY="3" />
  52. </Setter.Value>
  53. </Setter>
  54. <Setter TargetName="ExpandPath" Property="Fill" Value="Black" />
  55. </Trigger>
  56. <Trigger Property="IsEnabled" Value="false">
  57. <Setter TargetName="ExpandPath" Property="Fill" Value="#FF9A9A9A" />
  58. </Trigger>
  59. </ControlTemplate.Triggers>
  60. </ControlTemplate>
  61. </Setter.Value>
  62. </Setter>
  63. </Style>
  64. <Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}">
  65. <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
  66. <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
  67. <Setter Property="Padding" Value="1,0,0,0" />
  68. <Setter Property="FontFamily" Value="Arial" />
  69. <Setter Property="Background" Value="{DynamicResource TreeView_BG_MouseOver}" />
  70. <Setter Property="Foreground" Value="{DynamicResource FG_Black}" />
  71. <Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}" />
  72. <Setter Property="FontSize" Value="16" />
  73. <Setter Property="Template">
  74. <Setter.Value>
  75. <ControlTemplate TargetType="{x:Type TreeViewItem}">
  76. <Grid SnapsToDevicePixels="true">
  77. <Grid.ColumnDefinitions>
  78. <ColumnDefinition Width="Auto" MinWidth="22" />
  79. <ColumnDefinition Width="Auto" />
  80. <ColumnDefinition Width="*" />
  81. </Grid.ColumnDefinitions>
  82. <Grid.RowDefinitions>
  83. <RowDefinition Height="Auto" MinHeight="24" />
  84. <RowDefinition />
  85. </Grid.RowDefinitions>
  86. <Border
  87. x:Name="Text_BG"
  88. Grid.ColumnSpan="3"
  89. Margin="-2,2,1,1"
  90. Background="{TemplateBinding Background}"
  91. Opacity="0" />
  92. <ToggleButton
  93. x:Name="Expander"
  94. ClickMode="Press"
  95. IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
  96. Style="{StaticResource ExpandCollapseToggleStyle}" />
  97. <Grid
  98. x:Name="TreeViewHeader"
  99. Grid.Column="1"
  100. HorizontalAlignment="Left"
  101. Cursor="Hand">
  102. <ContentPresenter
  103. x:Name="PART_Header"
  104. Margin="2,0,5,0"
  105. HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
  106. VerticalAlignment="Center"
  107. ContentSource="Header"
  108. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  109. </Grid>
  110. <ItemsPresenter
  111. x:Name="ItemsHost"
  112. Grid.Row="1"
  113. Grid.RowSpan="1"
  114. Grid.Column="1"
  115. Grid.ColumnSpan="2" />
  116. </Grid>
  117. <ControlTemplate.Triggers>
  118. <Trigger SourceName="TreeViewHeader" Property="IsMouseOver" Value="True">
  119. <Setter TargetName="Text_BG" Property="Opacity" Value="1" />
  120. <Setter Property="Foreground" Value="{DynamicResource FG_Blue}" />
  121. </Trigger>
  122. <Trigger Property="IsSelected" Value="True">
  123. <Setter TargetName="Text_BG" Property="BorderThickness" Value="0" />
  124. <Setter TargetName="Text_BG" Property="Opacity" Value="1" />
  125. <Setter Property="Foreground" Value="{DynamicResource FG_White}" />
  126. <Setter TargetName="Text_BG" Property="Background" Value="{DynamicResource TreeView_BG_Select}" />
  127. </Trigger>
  128. <Trigger Property="IsExpanded" Value="false">
  129. <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed" />
  130. </Trigger>
  131. <Trigger Property="HasItems" Value="false">
  132. <Setter TargetName="Expander" Property="Visibility" Value="Hidden" />
  133. </Trigger>
  134. <Trigger Property="IsEnabled" Value="false">
  135. <Setter Property="Foreground" Value="#FF9A9A9A" />
  136. </Trigger>
  137. </ControlTemplate.Triggers>
  138. </ControlTemplate>
  139. </Setter.Value>
  140. </Setter>
  141. <Style.Triggers>
  142. <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
  143. <Setter Property="ItemsPanel">
  144. <Setter.Value>
  145. <ItemsPanelTemplate>
  146. <VirtualizingStackPanel />
  147. </ItemsPanelTemplate>
  148. </Setter.Value>
  149. </Setter>
  150. </Trigger>
  151. </Style.Triggers>
  152. </Style>
  153. <Style
  154. x:Key="TreeView-SecondFloor"
  155. BasedOn="{StaticResource {x:Type TreeViewItem}}"
  156. TargetType="{x:Type TreeViewItem}">
  157. <Setter Property="FontSize" Value="14" />
  158. </Style>
  159. <Style x:Key="{x:Type TreeView}" TargetType="{x:Type TreeView}">
  160. <Setter Property="Background" Value="Transparent" />
  161. <Setter Property="OverridesDefaultStyle" Value="True" />
  162. <Setter Property="SnapsToDevicePixels" Value="True" />
  163. <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
  164. <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
  165. <Setter Property="Template">
  166. <Setter.Value>
  167. <ControlTemplate TargetType="{x:Type TreeView}">
  168. <Border
  169. x:Name="Border"
  170. BorderThickness="1"
  171. CornerRadius="1">
  172. <ScrollViewer
  173. Padding="4"
  174. CanContentScroll="False"
  175. Focusable="False">
  176. <ItemsPresenter />
  177. </ScrollViewer>
  178. </Border>
  179. </ControlTemplate>
  180. </Setter.Value>
  181. </Setter>
  182. </Style>
  183. <Style x:Key="TreeViewItemExtend" TargetType="{x:Type TreeViewItem}">
  184. <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
  185. <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}" />
  186. <Setter Property="Padding" Value="1,0,0,0" />
  187. <Setter Property="FontFamily" Value="Arial" />
  188. <Setter Property="Background" Value="{DynamicResource TreeView_BG_MouseOver}" />
  189. <Setter Property="Foreground" Value="{DynamicResource FG_Black}" />
  190. <Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}" />
  191. <Setter Property="FontSize" Value="16" />
  192. <Setter Property="Template">
  193. <Setter.Value>
  194. <ControlTemplate TargetType="{x:Type TreeViewItem}">
  195. <Grid SnapsToDevicePixels="true">
  196. <Grid.ColumnDefinitions>
  197. <ColumnDefinition Width="Auto" MinWidth="22" />
  198. <ColumnDefinition Width="Auto" />
  199. <ColumnDefinition Width="*" />
  200. </Grid.ColumnDefinitions>
  201. <Grid.RowDefinitions>
  202. <RowDefinition Height="Auto" MinHeight="24" />
  203. <RowDefinition />
  204. </Grid.RowDefinitions>
  205. <Border
  206. x:Name="Text_BG"
  207. Grid.Column="1"
  208. Margin="-2,2,1,1"
  209. Background="red"
  210. Opacity="0" />
  211. <ToggleButton
  212. x:Name="Expander"
  213. ClickMode="Press"
  214. IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
  215. Style="{StaticResource ExpandCollapseToggleStyle}" />
  216. <Grid
  217. x:Name="TreeViewHeader"
  218. Grid.Column="1"
  219. HorizontalAlignment="Left"
  220. Cursor="Hand">
  221. <ContentPresenter
  222. x:Name="PART_Header"
  223. Margin="2,0,5,0"
  224. HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
  225. VerticalAlignment="Center"
  226. ContentSource="Header"
  227. SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
  228. </Grid>
  229. <ItemsPresenter
  230. x:Name="ItemsHost"
  231. Grid.Row="1"
  232. Grid.RowSpan="1"
  233. Grid.Column="1"
  234. Grid.ColumnSpan="2" />
  235. </Grid>
  236. <ControlTemplate.Triggers>
  237. <!--<Trigger Property="IsMouseOver" SourceName="TreeViewHeader" Value="True">
  238. <Setter Property="Opacity" TargetName="Text_BG" Value="1"/>
  239. <Setter Property="Foreground" Value="{DynamicResource FG_Blue}"/>
  240. </Trigger>-->
  241. <Trigger Property="IsSelected" Value="True">
  242. <Setter Property="FontWeight" Value="Bold" />
  243. <Setter TargetName="Text_BG" Property="BorderThickness" Value="0" />
  244. <Setter TargetName="Text_BG" Property="Opacity" Value="1" />
  245. <Setter TargetName="Text_BG" Property="Background" Value="{DynamicResource TreeView_BG_Select}" />
  246. </Trigger>
  247. <Trigger Property="IsExpanded" Value="false">
  248. <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed" />
  249. </Trigger>
  250. <Trigger Property="HasItems" Value="false">
  251. <Setter TargetName="Expander" Property="Visibility" Value="Hidden" />
  252. </Trigger>
  253. <Trigger Property="IsEnabled" Value="false">
  254. <Setter Property="Foreground" Value="#FF9A9A9A" />
  255. </Trigger>
  256. </ControlTemplate.Triggers>
  257. </ControlTemplate>
  258. </Setter.Value>
  259. </Setter>
  260. <Style.Triggers>
  261. <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
  262. <Setter Property="ItemsPanel">
  263. <Setter.Value>
  264. <ItemsPanelTemplate>
  265. <VirtualizingStackPanel />
  266. </ItemsPanelTemplate>
  267. </Setter.Value>
  268. </Setter>
  269. </Trigger>
  270. </Style.Triggers>
  271. </Style>
  272. </ResourceDictionary>