WPF TreeView样式模板在样式开关上重置IsExpanded

时间:2014-11-20 08:04:54

标签: wpf templates treeview wpf-controls wpf-style

我在一个窗口上有一个基本的TreeView,它有一个从dll中的资源应用的样式。样式dll能够在两种样式之间切换。当我在dll中没有TreeView的样式时,我能够扩展TreeViewItems,切换样式(其他控件的样式),并且TreeViewItems仍然展开。但是,只要我为TreeView添加样式,一旦切换样式,已展开的TreeViewItem就会崩溃。

为了追踪问题,已删除所有精美动画和TreeViewItem样式。剩下的风格很简单:

<Style x:Key="{x:Type TreeView}" TargetType="{x:Type TreeView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TreeView">
                <Border Name="Border"
                        Background="Transparent"
                        BorderThickness="1"
                        CornerRadius="1">

                    <ItemsPresenter />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

任何建议都将不胜感激。我已经没想完了!

1 个答案:

答案 0 :(得分:0)

当您拿走模板或替换另一个模板时,某些依赖项属性将重置为其默认值。原因是依赖属性优先级。请看这里:http://msdn.microsoft.com/library/ms743230

可以这样想:依赖属性可能包含许多分层的值。最顶层的值始终是当前值。如果你采取一种风格,你也会走开层。如果取走所有图层,则依赖项属性将默认值作为当前值。

当您更换TreeView的样式时,所有底层样式都将更新/重新启动/更改/重置...

要解决这个问题,请尝试保留相同的模板,只更改颜色,边框和类似的东西..或使用Binding