Dab*_*rnl 6 .net wpf resources datatemplate
我有以下内容DataTemplate:
<DataTemplate x:Key="ColoringLabels">
<TextBlock Padding="0"
Margin="0"
Name="Username"
Text="{Binding Username}"
Foreground="Gray"
FontStyle="Italic"
/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsLoggedIn}" Value="True">
<Setter TargetName="Username" Property="FontSize" Value="14"/>
<Setter TargetName="Username" Property="Foreground" Value="Green"/>
<Setter TargetName="Username" Property="FontStyle" Value="Normal"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我想ListView在每个用户名后跟一个模板的地方使用模板; 和一个空间.
实际上,模板的行为就像这样写:
<DataTemplate x:Key="ColoringLabels">
<TextBlock Padding="0"
Margin="0"
Name="Username"
Text="{Binding Username, StringFormat='{}{0}; '}"
Foreground="Gray"
FontStyle="Italic"
/>
<DataTemplate.Triggers>
...
</DataTemplate.Triggers>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如何扩展原始模板以获得第二个模板的结果?
没有直接机制让一个DataTemplate继承另一个DataTemplate的属性.
但是,您可以通过使用具有继承功能的样式来成功避免代码重复.
我相信这会给你你需要的东西:
<Style x:Key="StandardBoundTb" TargetType="TextBlock">
<Setter Property="Padding" Value="0" />
<Setter Property="Margin" Value="0" />
<Setter Property="Text" Value="{Binding Path=Username}" />
<!-- etc -->
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsLoggedIn}" Value="True">
<Setter Property="FontSize" Value="14" />
<!-- etc -->
</DataTrigger>
</Style.Triggers>
</Style>
<Style x:Key="DelimitedBoundTb" TargetType="TextBlock"
BasedOn="{StaticResource StandardBoundTb}"
>
<Setter Property="Text" Value="{Binding Path=Username, StringFormat='{}{0}; '}" />
</Style>
<DataTemplate x:Key="ColoringLabels">
<TextBlock Style="{StaticResource StandardBoundTb}" />
</DataTemplate>
<DataTemplate x:Key="ColoringLabelsDelimited">
<TextBlock Style="{StaticResource DelimitedBoundTb}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)