app.xaml中的datatemplate在没有任何样式的情况下没有被拾取?

Ram*_*mki 17 wpf styles datatemplate app.xaml

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

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

如果没有样式,则不会应用上述模板.我放风格的那一刻,像...

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="TextBlock">
        <Setter Property="FontSize" Value="20"></Setter>
    </Style>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

datatemplate被拿起并产生预期的结果......我不确定那里发生了什么......有人可以澄清一下吗?

谢谢.

Fre*_*lad 22

这里回答了类似的问题.问题不完全相同,一个包含合并的词典被跳过但很可能是同一个bug.

这是一个优化错误,请参阅此链接.

在XAML中创建每个对象时,如果存在默认样式(即具有Type的键的样式),则应该应用该样式.您可以想象,有几种性能优化可以使(隐含)查找尽可能轻量级.其中之一是我们不会查看资源字典,除非它们被标记为"包含默认样式".有一个错误:如果所有默认样式都嵌套在合并的字典中三个级别(或更深),则顶级字典不会被标记,因此搜索会跳过它.解决方法是在根词典中将默认样式放在某个东西上.

我看到你已经找到了解决方法,只需在App.xaml中添加一个默认的虚拟样式.它不需要任何setter等,这样的东西也可以

<Application.Resources>
    <DataTemplate DataType="{x:Type vm:someviewmodeltype}">
        <vw:somevwcontrol />
    </DataTemplate>
    <Style TargetType="{x:Type Rectangle}" /> 
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)


Dre*_*kes 5

{x:Type}另一个陷阱是从属性中遗漏了 the DataType

错误的

它会默默地构建、运行和失败:

<DataTemplate DataType="local:MyType">
Run Code Online (Sandbox Code Playgroud)

正确的

<DataTemplate DataType="{x:Type local:MyType}">
Run Code Online (Sandbox Code Playgroud)