我在app.xaml中有一个DataTemplate,它将视图绑定到视图模型。

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
</Application.Resources>


如果没有样式,则不会应用上述模板。当我放上样式的时候,类似...

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="20"></Setter>
    </Style>
</Application.Resources>


datatemplate被拾取并产生期望的结果...我不确定在那里发生了什么...有人可以澄清吗?

谢谢。

最佳答案

回答了类似的问题here。问题并不完全相同,一个包含合并字典的内容被跳过了,但这很可能是相同的错误。

这是一个优化错误,请参见this link


关于创建每个对象
XAML,如果存在默认样式
(即带有Type的键的样式)
样式应适用。尽你所能
想象有几种表现
优化使其(暗示)
查找尽可能轻的重量。之一
其中之一是我们不看里面
资源字典,除非它们是
标记为“包含默认
样式”。有一个错误:如果您所有
默认样式嵌套在合并中
字典深三级(或
更深)顶部的字典不
被标记,以便搜索跳过它。
解决方法是设置默认值
在任何事物中都具有风格
根字典。


我看到您也已经找到了解决方法,只需在App.xaml中添加默认的虚拟样式即可。它不需要任何二传手,类似的东西也可以

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="{x:Type Rectangle}" />
</Application.Resources>

关于wpf - 没有任何样式的app.xaml中的datatemplate是否不会被拾取?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4813488/

10-17 01:14