wpf - 数据模板的复用

标签 wpf resources datatemplate styles

我的 Treelistview 控件中有两个 DataTemplates 用于不同的单元格。
模板是 90% 相似的。
如何重用相同的 Xaml ?

  <DataTemplate x:Key="@names">
            <TextBlock Name="txt" Text="{Binding Names}" Style="{DynamicResource @BasicTextBlockStyle}"
                    Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" />
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsVisible}" Value="True">
                    <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" />
                </DataTrigger>
                <DataTrigger Binding="{Binding IsScoped}" Value="True">
                    <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>

        <DataTemplate x:Key="@Ages">
            <TextBlock Name="txt" Text="{Binding Age}" Style="{DynamicResource @BasicTextBlockStyle}"
                    Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" />
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding IsVisible}" Value="True">
                    <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" />
                </DataTrigger>
                <DataTrigger Binding="{Binding IsScoped}" Value="True">
                    <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>

最佳答案

你可以尝试做这样的事情:

<DataTemplate x:Key="Inner">
    <TextBlock Name="txt" Text="{Binding}" Style="{DynamicResource @BasicTextBlockStyle}"
            Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border},AncestorLevel=1}, Path=BorderBrush,Mode=OneWay}" />
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsVisible}" Value="True">
            <Setter Property="Style" Value="{DynamicResource @HeaderTextBlockStyle}" TargetName="txt" />
        </DataTrigger>
        <DataTrigger Binding="{Binding IsScoped}" Value="True">
            <Setter Property="Style" Value="{DynamicResource @RootElementTextBlockStyle}" TargetName="txt" />
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

<DataTemplate x:Key="Names">
    <Border BorderBrush="Black" BorderThickness="1" Height="100" Width="100" HorizontalAlignment="Left">
        <ContentPresenter Content="{Binding Names}" ContentTemplate="{StaticResource Inner}" />
    </Border>
</DataTemplate>

<DataTemplate x:Key="Ages">
    <Border BorderBrush="Black" BorderThickness="1" Height="100" Width="100" HorizontalAlignment="Right">
        <ContentPresenter Content="{Binding Ages}" ContentTemplate="{StaticResource Inner}" />
    </Border>
</DataTemplate>

关于wpf - 数据模板的复用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3958984/

相关文章:

c# - 如何在c#和wpf中实现scrollviewer bouncing的动画?

c# - 返回null时如何递归选择AdornedElement的父级

c# - 以编程方式创建资源文件

java - Spring资源自动重载

c# - 模板之间的区别

c# - 使用 TwoWay 将 string[] 绑定(bind)到 XAML

java - 为 Java 游戏组织资源

c# - 更好的填充 ListBox DataTemplate 的性能

c# - WPF 切换 UIElements 在 DataTemplate 中的可见性

c# - 制作用户控制脉冲