我无法为下一个问题制定通用解决方案:
想象一个自定义 TreeView 控件,它是一个;;pws 主题 - 在单独的 xaml 文件中有一个元素列表,用于为 TreeView 控件构建可视结构。有一个 onm Border 元素,我想根据显示的数据类型来绘制它的背景。此边框元素是“+”号的一部分,不会通过样式暴露出来。
我可以使用后面的代码来做到这一点,并订阅此控件提供的一些事件,然后在子元素中找到此边框,并更改其背景。但是,此代码将在许多视图中重复,有时完全相同,有时稍有不同的修改(例如,仅检查不同的数据元素的类型)。
有没有办法使用任何其他技术来做到这一点?似乎可以在这里使用样式选择器,因为视觉结构不是在那个点构建的,所以我不能通过它的名称搜索这个元素。并且此元素不会通过控件上的任何属性公开。
编辑:
目前我有我的 oqwn 控件来继承这个控件,如果你发现它可以使用附加/依赖属性来完成:
public class MyTreeView : CustomTreeView
{
}
如果我要为一行指定背景,我会创建一个样式选择器:
<local:ProductRowtyleSelector x:Key="productRowStyleSelector"
DefaultStyle="{StaticResource defaultProductRowStyle}"
GoodStyle="{StaticResource goodProductRowStyle}"
ScrapStyle="{StaticResource reworkProductRowStyle}" />
GoodStyle 将继承控件模板中存在的行的样式。这样,我将在显示产品列表的任何地方使用样式选择器。
是否有类似的方法可以对我在控件模板中添加的 Border 元素执行相同的操作?