TreeViewBaseStyle.xaml 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  3. xmlns:hc="clr-namespace:HandyControl.Controls">
  4. <PathGeometry x:Key="TreeArrow" Figures="M508.893248 762.931659a65.039498 65.039498 0 0 1-46.420659-19.485839L97.125746 371.004022c-25.143018-25.634319-24.752868-66.816849 0.881451-91.959868 25.648769-25.164693 66.809624-24.745643 91.959867 0.881451l318.933409 325.125238 318.933408-325.125238a65.025048 65.025048 0 0 1 92.841318 91.078417L555.313907 743.44582a65.025048 65.025048 0 0 1-46.420659 19.485839z"/>
  5. <Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton">
  6. <Setter Property="Focusable" Value="False"/>
  7. <Setter Property="Width" Value="16"/>
  8. <Setter Property="Height" Value="16"/>
  9. <Setter Property="Template">
  10. <Setter.Value>
  11. <ControlTemplate TargetType="ToggleButton">
  12. <Border Background="Transparent" Height="16" Padding="4" Width="16">
  13. <Path x:Name="ExpandPath" RenderTransformOrigin="0.5,0.5" Stretch="Uniform" Data="{StaticResource TreeArrow}" Fill="{Binding Foreground, RelativeSource={RelativeSource AncestorType=TreeViewItem}}">
  14. <Path.RenderTransform>
  15. <RotateTransform Angle="-90"/>
  16. </Path.RenderTransform>
  17. </Path>
  18. </Border>
  19. <ControlTemplate.Triggers>
  20. <Trigger Property="IsChecked" Value="True">
  21. <Setter Property="RenderTransform" TargetName="ExpandPath">
  22. <Setter.Value>
  23. <RotateTransform Angle="0"/>
  24. </Setter.Value>
  25. </Setter>
  26. </Trigger>
  27. </ControlTemplate.Triggers>
  28. </ControlTemplate>
  29. </Setter.Value>
  30. </Setter>
  31. </Style>
  32. <Style x:Key="TreeViewItemBaseStyle" BasedOn="{StaticResource BaseStyle}" TargetType="TreeViewItem">
  33. <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisualRadius0Margin0}"/>
  34. <Setter Property="Background" Value="Transparent"/>
  35. <Setter Property="Padding" Value="10,0"/>
  36. <Setter Property="BorderThickness" Value="0"/>
  37. <Setter Property="MinHeight" Value="{StaticResource DefaultControlHeight}"/>
  38. <Setter Property="Margin" Value="0,0,0,2" />
  39. <Setter Property="Template">
  40. <Setter.Value>
  41. <ControlTemplate TargetType="TreeViewItem">
  42. <Grid>
  43. <Grid.RowDefinitions>
  44. <RowDefinition MinHeight="{TemplateBinding MinHeight}"/>
  45. <RowDefinition Height="Auto"/>
  46. </Grid.RowDefinitions>
  47. <Border x:Name="Bd" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
  48. <DockPanel LastChildFill="True" Margin="{Binding Converter={StaticResource TreeViewItemMarginConverter}, RelativeSource={RelativeSource TemplatedParent}}">
  49. <ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
  50. <ContentPresenter VerticalAlignment="Center" x:Name="PART_Header" ContentSource="Header" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
  51. </DockPanel>
  52. </Border>
  53. <ItemsPresenter x:Name="ItemsHost" Grid.Row="1"/>
  54. </Grid>
  55. <ControlTemplate.Triggers>
  56. <Trigger Property="IsMouseOver" Value="true" SourceName="Bd">
  57. <Setter Property="Background" TargetName="Bd" Value="{DynamicResource SecondaryRegionBrush}"/>
  58. </Trigger>
  59. <Trigger Property="IsExpanded" Value="false">
  60. <Setter Property="Visibility" TargetName="ItemsHost" Value="Collapsed"/>
  61. </Trigger>
  62. <Trigger Property="HasItems" Value="false">
  63. <Setter Property="Visibility" TargetName="Expander" Value="Hidden"/>
  64. </Trigger>
  65. <Trigger Property="IsSelected" Value="true">
  66. <Setter Property="Background" TargetName="Bd" Value="{DynamicResource PrimaryBrush}"/>
  67. <Setter Property="Foreground" Value="{DynamicResource TextIconBrush}"/>
  68. </Trigger>
  69. <MultiTrigger>
  70. <MultiTrigger.Conditions>
  71. <Condition Property="IsSelected" Value="true"/>
  72. <Condition Property="IsSelectionActive" Value="false"/>
  73. </MultiTrigger.Conditions>
  74. <Setter Property="Background" TargetName="Bd" Value="{DynamicResource DarkDefaultBrush}"/>
  75. <Setter Property="Foreground" Value="{DynamicResource PrimaryTextBrush}"/>
  76. </MultiTrigger>
  77. <Trigger Property="IsEnabled" Value="false">
  78. <Setter Property="Opacity" Value=".4" />
  79. </Trigger>
  80. </ControlTemplate.Triggers>
  81. </ControlTemplate>
  82. </Setter.Value>
  83. </Setter>
  84. </Style>
  85. <Style x:Key="TreeViewBaseStyle" TargetType="TreeView" BasedOn="{StaticResource BaseStyle}">
  86. <Setter Property="Focusable" Value="False"/>
  87. <Setter Property="Background" Value="{DynamicResource RegionBrush}"/>
  88. <Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
  89. <Setter Property="BorderThickness" Value="1"/>
  90. <Setter Property="Padding" Value="2,2,2,0" />
  91. <Setter Property="hc:BorderElement.CornerRadius" Value="{StaticResource DefaultCornerRadius}" />
  92. <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
  93. <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
  94. <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
  95. <Setter Property="hc:ScrollViewer.IsInertiaEnabled" Value="False"/>
  96. <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
  97. <Setter Property="VerticalContentAlignment" Value="Center"/>
  98. <Setter Property="VirtualizingPanel.IsVirtualizing" Value="True"/>
  99. <Setter Property="Template">
  100. <Setter.Value>
  101. <ControlTemplate TargetType="TreeView">
  102. <Border x:Name="Bd" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
  103. <hc:ToggleBlock IsChecked="{Binding HasItems,RelativeSource={RelativeSource TemplatedParent},Mode=OneWay}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
  104. <hc:ToggleBlock.CheckedContent>
  105. <hc:ScrollViewer x:Name="_tv_scrollviewer_" IsInertiaEnabled="{Binding Path=(hc:ScrollViewer.IsInertiaEnabled),RelativeSource={RelativeSource TemplatedParent}}" Focusable="false" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}">
  106. <ItemsPresenter/>
  107. </hc:ScrollViewer>
  108. </hc:ToggleBlock.CheckedContent>
  109. <hc:ToggleBlock.UnCheckedContent>
  110. <hc:Empty/>
  111. </hc:ToggleBlock.UnCheckedContent>
  112. </hc:ToggleBlock>
  113. </Border>
  114. <ControlTemplate.Triggers>
  115. <Trigger Property="VirtualizingPanel.IsVirtualizing" Value="true">
  116. <Setter Property="CanContentScroll" TargetName="_tv_scrollviewer_" Value="true"/>
  117. </Trigger>
  118. </ControlTemplate.Triggers>
  119. </ControlTemplate>
  120. </Setter.Value>
  121. </Setter>
  122. <Style.Triggers>
  123. <Trigger Property="VirtualizingPanel.IsVirtualizing" Value="true">
  124. <Setter Property="ItemsPanel">
  125. <Setter.Value>
  126. <ItemsPanelTemplate>
  127. <VirtualizingStackPanel/>
  128. </ItemsPanelTemplate>
  129. </Setter.Value>
  130. </Setter>
  131. </Trigger>
  132. </Style.Triggers>
  133. </Style>
  134. </ResourceDictionary>