首页 > 解决方案 > 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到另一个文件(如资源)并重用它,但绑定的路径确实让事情变得复杂。有谁能够帮我?

谢谢

标签: wpfdatatemplate

解决方案


恐怕您不能只替换绑定路径并在纯 XAML 中重用模板的其余部分,因为必须将模板定义为一个整体。

您可以做的是使用以下XamlReader.Parse方法以编程方式定义模板:

在运行时组合 DataTemplate

然后string,您可以Parse在将模板添加到您的ResourceDictionary.


推荐阅读