在 TreeViewItem.Resources 之间共享某些资源
Share certain resources among TreeViewItem.Resources
我的应用程序中有几个 TreeView 控件,它们都类似于:
<TreeView SelectedItemChanged="TreeView_OnSelectedItemChanged" x:Name="AccountsTree" >
<TreeView.Resources>
<!-- styles -->
</TreeView.Resources>
<TreeViewItem Header="Things" >
<TreeViewItem.Resources>
<!--From:
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />-->
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black" />-->
<HierarchicalDataTemplate DataType="{x:Type local:ThingEntity}" ItemsSource="{Binding Children, Mode=OneWay}">
<HierarchicalDataTemplate.Resources>
<!-- styles -->
</HierarchicalDataTemplate.Resources>
<StackPanel Orientation="Horizontal">
<i:Interaction.Behaviors>
<!-- drag 'n drop -->
</i:Interaction.Behaviors>
<Image x:Name="ThingIcon" />
<TextBlock Text="{Binding ThingName}" Margin="6,0,6,0" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeViewItem.Resources>
</TreeViewItem>
</TreeView>
我在这个答案中找到了更改 SelectedItem 颜色的简单方法:TreeView shows blue for selected item
有没有办法以某种方式封装 SolidColorBrush 定义的集合,使它们易于在所有需要它们的 TreeView 中重复使用?
或者,有没有一种方法可以将该画笔集合应用到所有 TreeViewItem 控件,很像
<Style TargetType="{x:Type TreeViewItem}">
<!-- style stuff -->
</Style>
将定义的样式应用于所有 TreeViewItem 控件?
谢谢--
样式可以有 Resources
。简单。
<Style TargetType="{x:Type TreeViewItem}">
<Style.Resources>
<!--From:
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />-->
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black" />-->
<HierarchicalDataTemplate DataType="{x:Type local:ThingEntity}" ItemsSource="{Binding Children, Mode=OneWay}">
<HierarchicalDataTemplate.Resources>
<!-- styles -->
</HierarchicalDataTemplate.Resources>
<StackPanel Orientation="Horizontal">
<i:Interaction.Behaviors>
<!-- drag 'n drop -->
</i:Interaction.Behaviors>
<Image x:Name="ThingIcon" />
<TextBlock Text="{Binding ThingName}" Margin="6,0,6,0" />
</StackPanel>
</HierarchicalDataTemplate>
</Style.Resources>
</Style>
您也可以嵌套这些。一个Style的资源可以包含另一个Style,这个Style可以使用父style的资源:
<Style x:Key="RedBlueTreeView" TargetType="TreeView">
<Style.Resources>
<SolidColorBrush x:Key="BlueBrush" Color="Red" />
<Style TargetType="TreeViewItem">
<Style.Resources>
<HierarchicalDataTemplate
DataType="{x:Type local:ThingEntity}"
ItemsSource="{Binding Children}"
>
<Label
Foreground="{StaticResource BlueBrush}"
Content="{Binding Stuff}"
/>
</HierarchicalDataTemplate>
</Style.Resources>
</Style>
</Style.Resources>
</Style>
我的应用程序中有几个 TreeView 控件,它们都类似于:
<TreeView SelectedItemChanged="TreeView_OnSelectedItemChanged" x:Name="AccountsTree" >
<TreeView.Resources>
<!-- styles -->
</TreeView.Resources>
<TreeViewItem Header="Things" >
<TreeViewItem.Resources>
<!--From:
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />-->
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black" />-->
<HierarchicalDataTemplate DataType="{x:Type local:ThingEntity}" ItemsSource="{Binding Children, Mode=OneWay}">
<HierarchicalDataTemplate.Resources>
<!-- styles -->
</HierarchicalDataTemplate.Resources>
<StackPanel Orientation="Horizontal">
<i:Interaction.Behaviors>
<!-- drag 'n drop -->
</i:Interaction.Behaviors>
<Image x:Name="ThingIcon" />
<TextBlock Text="{Binding ThingName}" Margin="6,0,6,0" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeViewItem.Resources>
</TreeViewItem>
</TreeView>
我在这个答案中找到了更改 SelectedItem 颜色的简单方法:TreeView shows blue for selected item
有没有办法以某种方式封装 SolidColorBrush 定义的集合,使它们易于在所有需要它们的 TreeView 中重复使用?
或者,有没有一种方法可以将该画笔集合应用到所有 TreeViewItem 控件,很像
<Style TargetType="{x:Type TreeViewItem}">
<!-- style stuff -->
</Style>
将定义的样式应用于所有 TreeViewItem 控件?
谢谢--
样式可以有 Resources
。简单。
<Style TargetType="{x:Type TreeViewItem}">
<Style.Resources>
<!--From:
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="LightBlue" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />-->
<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
<!--<SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black" />-->
<HierarchicalDataTemplate DataType="{x:Type local:ThingEntity}" ItemsSource="{Binding Children, Mode=OneWay}">
<HierarchicalDataTemplate.Resources>
<!-- styles -->
</HierarchicalDataTemplate.Resources>
<StackPanel Orientation="Horizontal">
<i:Interaction.Behaviors>
<!-- drag 'n drop -->
</i:Interaction.Behaviors>
<Image x:Name="ThingIcon" />
<TextBlock Text="{Binding ThingName}" Margin="6,0,6,0" />
</StackPanel>
</HierarchicalDataTemplate>
</Style.Resources>
</Style>
您也可以嵌套这些。一个Style的资源可以包含另一个Style,这个Style可以使用父style的资源:
<Style x:Key="RedBlueTreeView" TargetType="TreeView">
<Style.Resources>
<SolidColorBrush x:Key="BlueBrush" Color="Red" />
<Style TargetType="TreeViewItem">
<Style.Resources>
<HierarchicalDataTemplate
DataType="{x:Type local:ThingEntity}"
ItemsSource="{Binding Children}"
>
<Label
Foreground="{StaticResource BlueBrush}"
Content="{Binding Stuff}"
/>
</HierarchicalDataTemplate>
</Style.Resources>
</Style>
</Style.Resources>
</Style>