2011-01-27 80 views
13

我在app.xaml中有一个DataTemplate,它将视图绑定到视图模型。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被拾起并产生期望的结果...我不知道发生了什么有...可能有人澄清这一点?

谢谢。

回答

18

已回答相似问题here。问题并不完全一样,其中一个包含合并字典被跳过,但最有可能是同一个错误。

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

论 XAML创建的每个对象的,如果默认的样式是本 (即风格瓦特/类型的键),其 样式应该应用。正如你可以想象有几个性能 优化,使(暗示) 查找尽可能轻的重量。其中一个 是我们不看 资源字典,除非它们是 标记为“包含默认 样式”。有一个错误:如果所有 默认样式都嵌套在合并的 字典三级深度(或 更深)中,顶级字典不会标记为 ,因此搜索将跳过它。 解决方法是将默认 样式设置为 根词典中的任何内容。

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

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

花了一整天的时间寻找这个。解决了! – JvdBerg 2015-04-29 16:16:01