你好,我有这个XAML代码
<DataTemplate x:Key="BLUnitPriceTemplate">
<TextBlock x:Name="CellTB"
Padding="10,3"
Style="{StaticResource DarkSmallFontStyle}"
Text="{Binding UnitPrice, StringFormat={}{0:N2}}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding LineType}" Value="Total">
<Setter Property="Background" Value="{StaticResource PinkBackgroundBrush}"
TargetName="CellTB" />
<Setter Property="Style" Value="{StaticResource SmallFontStyle}"
TargetName="CellTB" />
</DataTrigger>
<DataTrigger Binding="{Binding LineType}" Value="Rate">
<Setter Property="Background" Value="#CCCCCC"
TargetName="CellTB" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
<DataTemplate x:Key="BLRemiseTemplate">
<TextBlock x:Name="CellTB"
Padding="10,3"
Style="{StaticResource DarkSmallFontStyle}"
Text="{Binding Remise, StringFormat={}{0:N2}}" />
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding LineType}" Value="Total">
<Setter Property="Background" Value="{StaticResource PinkBackgroundBrush}"
TargetName="CellTB" />
<Setter Property="Style" Value="{StaticResource SmallFontStyle}"
TargetName="CellTB" />
</DataTrigger>
<DataTrigger Binding="{Binding LineType}" Value="Rate">
<Setter Property="Background" Value="#CCCCCC"
TargetName="CellTB" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
但是您可以看到数据模板触发器几乎相同。仅文本绑定更改。
我发现它显得过时又丑陋AF
有没有一种方法可以分解数据模板触发器以在多个DataTemplate中使用相同的触发器?
编辑: 答案是一个很好的尝试,但是由于Style定义中的Style Setter似乎没有用。如果有人阅读并想要尝试一下,我选择在工作时添加一些上下文。
此DataGrid使用了我的模板
<DataGrid ItemsSource="{Binding Details}">
<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="LightGray"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="True">
<Setter Property="Background" Value="LightBlue"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTemplateColumn
CellStyle="{StaticResource AppManagementAddCellStyle}"
Header="{x:Static languages:ResAbbreviations.PU}"
Width="60"
CellTemplate="{StaticResource BLUnitPriceTemplate}"
/>
<DataGridTemplateColumn
CellStyle="{StaticResource AppManagementAddCellStyle}"
Header="{x:Static languages:ResAbbreviations.DiscountPercent}"
Width="60"
CellTemplate="{StaticResource BLRemiseTemplate}"
/>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:2)
将触发器移至TextBlock样式:
<Style x:Key="CellTBStyle" TargetType="TextBlock"
BasedOn="{StaticResource DarkSmallFontStyle}">
<Setter Property="Padding" Value="10,3"/>
<Style.Triggers>
<DataTrigger Binding="{Binding LineType}" Value="Total">
<Setter Property="Background" Value="{StaticResource PinkBackgroundBrush}"/>
<!-- more Setters -->
</DataTrigger>
<DataTrigger Binding="{Binding LineType}" Value="Rate">
<Setter Property="Background" Value="#CCCCCC"/>
</DataTrigger>
</Style.Triggers>
</Style>
<DataTemplate x:Key="BLUnitPriceTemplate">
<TextBlock Style="{StaticResource CellTBStyle}"
Text="{Binding UnitPrice, StringFormat={}{0:N2}}" />
</DataTemplate>
<DataTemplate x:Key="BLRemiseTemplate">
<TextBlock Style="{StaticResource CellTBStyle}"
Text="{Binding Remise, StringFormat={}{0:N2}}" />
</DataTemplate>