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)
{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)
归档时间: |
|
查看次数: |
4285 次 |
最近记录: |