如何对WPF的TreeViewItem进行子类化并在treevview中使用它

时间:2012-02-27 18:27:00

标签: wpf treeview treeviewitem

我创建了一个简单的依赖属性,我想附加到treeViewitem,我已经为其他控件(如按钮)做了类似的事情,但是无法弄清楚如何在树视图中使用TreeViewItem而不会丢失我定义的样式。使用下面的代码,我得到“用于类型的样式'ErrorTreeViewItem'不能应用于'TreeViewItem'类型。”

public class ErrorTreeViewItem : TreeViewItem
{
    static ErrorTreeViewItem()
    {
    }

    public bool ErrorState
    {
        get { return (bool)GetValue(ErrorStateProperty); }
        set { base.SetValue(ErrorStateProperty, value); }
    }

    public static readonly DependencyProperty ErrorStateProperty =
        DependencyProperty.Register("ErrorState", typeof(bool), typeof(ErrorTreeViewItem), new UIPropertyMetadata(false));
}

我的树视图的样式如下:

      <Style TargetType="me:ErrorTreeViewItem">

        <Style.Resources>
           ...
        </Style.Resources>
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="TreeViewItem">
                ...
            </Setter.Value>
        </Setter>

我正在使用它:

    <TreeView Name="ApplicationTree" ItemsSource="{Binding Applications}" HorizontalContentAlignment="Stretch" Background="#E8E8E8" >
        <TreeView.ItemContainerStyle>
            <Style TargetType="me:ErrorTreeViewItem" BasedOn="{StaticResource {x:Type TreeViewItem}}">
                <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
                <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
            </Style>
        </TreeView.ItemContainerStyle>

1 个答案:

答案 0 :(得分:0)

TreeView将创建默认TreeViewItems,因此您首先需要创建您的树视图项。为此,您需要继承TreeView并覆盖PrepareContainerForItem以返回ErrorTreeViewItem的新实例。