wpf - Wpf 重用 DataTemplate
问题描述
在我的 xaml 代码中,我有两个看起来非常相似的地方,我正在尝试将它们重构为没有重复的代码,但事实证明这并不容易......
<DataTemplate >
<Image Width="16" Height="16" RenderOptions.BitmapScalingMode="HighQuality">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=TypeDescription}" Value="Matlab/Simulink">
<Setter Property="Source" Value="xxx.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=TypeDescription}" Value="Python">
<Setter Property="Source" Value="yyy.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=TypeDescription}" Value="High Speed Function">
<Setter Property="Source" Value="zzzpng"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
和
<DataTemplate DataType="dxg:GridCellData">
<Image Width="16" Height="16" RenderOptions.BitmapScalingMode="HighQuality">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Data.TypeDescription}" Value="Matlab/Simulink">
<Setter Property="Source" Value="xxx.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Data.TypeDescription}" Value="Python">
<Setter Property="Source" Value="yyy.png"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Data.TypeDescription}" Value="High Speed Function">
<Setter Property="Source" Value="zzz.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
请注意,唯一的区别是绑定的路径。我试图将它移动datatemplate
到另一个文件(如资源)并重用它,但绑定的路径确实让事情变得复杂。有谁能够帮我?
谢谢
解决方案
恐怕您不能只替换绑定路径并在纯 XAML 中重用模板的其余部分,因为必须将模板定义为一个整体。
您可以做的是使用以下XamlReader.Parse
方法以编程方式定义模板:
然后string
,您可以Parse
在将模板添加到您的ResourceDictionary
.
推荐阅读
- javascript - ember 序列化程序上的动态主键
- android - Butterknife @OnClick - 多次触发动作
- angular - 带有路由的 Angular 6 中的 Web 组件
- png - 动态生成的 og:image 可以被 Discord 查看
- python - get_FIELD_display() 不显示正确的值
- javascript - 如何从 algolia 地方搜索中获取 JSON?
- wordpress - 添加一个按数字搜索并从 TXT 文件中返回价格的产品搜索栏
- multithreading - 在 scala 猫的后台线程上运行 IO
- python - 如何使用 Impyla 和 Kerberos 连接到 Apache Hadoop
- python-3.x - 将 Jaccard 相似度保存在 CSV 文件中