C# 是否可以将RowDefinition资源设置为该行中所有文本块的样式?
我有一个包含许多文本块的网格。 我想根据相关ViewModel中的布尔值更改每个文本块的前景。 一行中的每个TextBlock都使用来自VM的相同绑定进行更改,因此我认为一个好方法是在GridRow上设置一个带有数据触发器的样式 我尝试使用以下方法:C# 是否可以将RowDefinition资源设置为该行中所有文本块的样式?,c#,wpf,C#,Wpf,我有一个包含许多文本块的网格。 我想根据相关ViewModel中的布尔值更改每个文本块的前景。 一行中的每个TextBlock都使用来自VM的相同绑定进行更改,因此我认为一个好方法是在GridRow上设置一个带有数据触发器的样式 我尝试使用以下方法: <Grid.RowDefinitions> <RowDefinition Height="Auto"> <RowDefinit
<Grid.RowDefinitions>
<RowDefinition Height="Auto">
<RowDefinition.Resources>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding TempWarning}" Value="True">
<Setter Property="Foreground" Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
</RowDefinition.Resources>
</RowDefinition>
然后我像这样声明TextBlock:
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding CurrentTemp}" HorizontalAlignment="Right" Margin="5,0"/>
但是,即使TempWarning值设置为true,TextBlock前景也不会更新
有人能提出原因吗?您应该将
样式移动到
:
非常感谢,这正是我所需要的。如果我需要为每一行涂上颜色,我该怎么做呢?它们都将是白色的,但每一行将绑定到不同的警告。这是唯一的区别。在不同的源属性中有不同的警告吗?您需要为每行创建一个样式。是的,此行中的绑定会有所不同:因此TempWarning将是TempWarning1(不是实际值,只是示例),Grid.row的值将是1。我尝试创建多个样式,但似乎无法为同一TargetType添加多个样式。您可以向同一个样式添加多个MultiDataTriggers
。
<Grid>
<Grid.Resources>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding TempWarning}" Value="True">
<Setter Property="Foreground" Value="White"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
...
</Grid.RowDefinitions>
...
</Grid>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding TempWarning}" Value="True" />
<Condition Binding="{Binding Path=(Grid.Row),
RelativeSource={RelativeSource Self}}" Value="0" />
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="White"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>