因此,如果我创建一个继承自ContentControl
的无外观控件,然后将其样式放在Generic.xaml
文件中,我需要将BasedOn={StaticResource {x:Type ContentControl}}
添加到样式中才能使其工作。但是,当我使用从HeaderedItemsControl
继承的无外观控件做同样的事情时,我得到一个运行时异常,说“
{"找不到名为' System.Windows.Controls.HeaderedItemsControl'的资源。资源名称区分大小写。"}
这很奇怪,因为它在那个命名空间中
示例代码:
不能工作
<Style TargetType="{x:Type myControl}"
BasedOn="{StaticResource {x:Type HeaderedItemsControl}}">
<Style TargetType="{x:Type myContentControl}">
工作
<Style TargetType="{x:Type myControl}">
<Style TargetType="{x:Type myContentControl}"
BasedOn="{StaticResource {x:Type ContentControl}}">
我的问题是,为什么他们没有处理相同的事情?这是语言中的错误吗?
答案 0 :(得分:1)
HeaderedItemsControl虽然没有定义主题样式,但这就是为什么你得到一个异常,因为你不能将Style基于另一个不存在的Style。
HeaderedItemsControl使用与它继承的ItemsControl相同的默认主题样式,因此可以使用:
<Style TargetType="{x:Type local:myControl}" BasedOn="{StaticResource {x:Type ItemsControl}}" />
答案 1 :(得分:-1)
所以我怀疑是爆炸的原因是HeaderedItemsControl在初始化时具有null默认样式。它实际上在documentation on MSDN中说明了这一点。
属性值类型:System.Windows.Style
应用于为每个元素生成的容器元素的样式 项目。默认值为null。
而ContentControl确实有默认样式,如MSDN documentation
中所示我无法在任何地方找到此问题并且错误非常模糊。但是,我认为我的结论是合理的。