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

时间:2011-01-27 06:42:34

标签: wpf datatemplate styles app.xaml

我在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被拿起并产生预期的结果......我不确定那里发生了什么......有人可以澄清一下吗?

感谢。

2 个答案:

答案 0 :(得分:20)

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

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

  

关于创建每个对象   XAML,如果存在默认样式   (即具有类型的键的样式)   风格应该适用。尽你所能   想象有几个表现   优化(隐含)   查找尽可能轻的重量。一   他们是我们不看里面   资源字典除非它们是   标记为“包含默认值   样式”。有一个错误:如果你所有的   默认样式嵌套在合并中   字典深入三层(或   更深层次的顶级词典没有   得到标记,以便搜索跳过它。   解决方法是设置默认值   风格的东西,任何东西,在   根词典。

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

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

答案 1 :(得分:0)

另一个陷阱是从 launch_template { id = aws_launch_template.cluster.id version = $Latest } 属性中剔除{x:Type}

错误

这会静默生成,运行并失败:

DataType

RIGHT

<DataTemplate DataType="local:MyType">