0

我开发了自定义TreeView(称之为MyTree)。在这个自定义控件中,我为设置控件模板定义了样式ResourceDictionary,我需要显示每个项目。首先,我创建了特殊的 ControlTemplate:General.xamlTreeViewItem

<ControlTemplate TargetType="{x:Type TreeViewItem}" x:Key="MyTreeViewItem">
.........
</ControlTemplate>

然后我以自定义样式使用它MyTree

<Style TargetType="{x:Type local:MyTree}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyTree}">
                <ControlTemplate.Resources>
                    <Style TargetType="{x:Type TreeViewItem}">
                        <Setter Property="Template" Value="{StaticResource MyTreeViewItem}" />
                    </Style>
                </ControlTemplate.Resources>
                ..........
                <ItemsPresenter />
                ..........
             </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

一切正常,而我使用我的控件,例如:

<local:MyTree>
     <local:MyTree.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding DependentSuites}"/>
     </local:MyTree.ItemTemplate>
     ..........other property specific for MyTree control.............
</local:MyTree>
enter code here

当我尝试为我的 TreeViewItem 添加样式时它会出错。例如,下面的代码

<local:MyTree>
     <local:MyTree.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding DependentSuites}"/>
     </local:MyTree.ItemTemplate>
     ..........other property specific for MyTree control.............
     <local:MultiColumnTreeView.Resources>
            <Style TargetType="TreeViewItem"
                <Setter Property="Background" Value="Red"/>
            </Style>
        </local:MultiColumnTreeView.Resources>
</local:MyTree> 

导致 wpf 重置我的自定义模板并开始使用 TreeViewItem 的默认样式。如果我为 ItemsContainerStyle 设置任何值,也会出现同样的情况。换句话说,任何样式修改都会重写我在 General.xaml 中的自定义样式。为什么会发生,以及如何避免这种情况,结合所有风格。

4

1 回答 1

2

您可以将它基于您想要的任何现有样式,并且只修改实例所需的内容,就像您使用Style BasedOn 属性所做的那样;

<Style TargetType="TreeViewItem" 
       BasedOn="{StaticResource YourExistingStyleYouWantToBaseItOn}">
    <Setter Property="Background" Value="Red"/>
</Style>

希望这可以帮助。

于 2013-07-24T20:24:29.127 回答