在 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>