好的...这里有两个人。 (中排序。实际上可能只是一个,那就是我希望反正。)修改或“调整”现有的TreeViewItem控件模板?
首先,更普遍的,是有可能的目标,仅通过XAML,在控制的模板命名的项目?例如,如果控件的模板有一个名为'PART_Foo'的ContentPresenter,并且我们想通过纯样式将该特定项目上的HorizontalAlignment设置为'Stretch',是否可以完成?我知道我们可以在子类的OnApplyTemplate覆盖中做到这一点,我们通过名称显式地搜索控件,然后在代码中设置属性,但是我们希望只使用仅限XAML的解决方案,因此我们可以通过样式严格执行此操作而不是子类,除了特定的用例场景之外,它们大多不鼓励使用。
另外,我们做不是想要手动指定控件的模板,因为我们希望当前主题确定该模板是什么,从而确定控件是如何显示的。我们只想说'在主题选择的任何模板中,如果有一个名为'foo'的部分,通过纯样式设置该属性。如果找不到那个名字的部分,什么也不要做!
对仅使用XAML方法的期望更多的是因为第二部分,我们将目标定位为生成的容器对象,而不是控件本身,意味着它不会是直接的子类,因为我们会必须用ItemcontainerGenerators等来解决这个问题,这对$$是一个真正的痛苦,特别是当ItemsControl被虚拟化时。
对于具体情况,我们的最终目标是在TreeView的TreeViewItem模板中选出名为'Bd'的边框,并将其附加属性'Grid.ColumnSpan'设置为'2'而不是默认值'1'。而已!它令我惊讶的是,如果没有手动替换整个TreeViewItem的模板或使用基于代码隐藏的解决方案,看起来如此简单似乎几乎不可能。
顺便说一句,这是我们想避免不得不做的只是改变一个臭味的财产! http://msdn.microsoft.com/en-us/library/ms788727.aspx – MarqueIV 2010-09-30 04:26:57