WPF中基于ListView创建自定义控件时找不到对应资源报错如何解决
问题原因
你遇到的报错是StaticResource的编译期资源查找特性和不同控件的默认样式加载时机差异导致的:
- WPF中Button这类简单基础控件的默认样式,在编译阶段就已经完成加载,会被纳入静态资源查找范围,因此你自定义LargeButton时用
{StaticResource {x:Type Button}}可以正常匹配到样式。 - ListView属于复杂的ItemsControl派生控件,它的默认样式加载时机晚于Generic.xaml的编译期资源检查流程,用
StaticResource在编译时查找就会找不到对应键的资源,抛出你遇到的大小写敏感提示的资源不存在错误。
解决方法
把BasedOn属性里的StaticResource改成运行时查找的DynamicResource即可,修改后的样式代码如下:
<Style TargetType="{x:Type local:MyListView}" BasedOn="{DynamicResource {x:Type ListView}}"> <Setter Property="FontSize" Value="16"/> <Setter Property="Margin" Value="2"/> </Style>
DynamicResource会在控件实际渲染的运行时阶段再查找系统的ListView默认样式,能够正常匹配到对应资源,不会再触发编译错误,你自定义的属性设置也会正常生效。
内容的提问来源于stack exchange,提问作者gekko_au
相关产品推荐
相关产品推荐

