WPF网格上的行数据触发器
本文关键字:数据 触发器 网格 WPF | 更新日期: 2023-09-27 18:15:09
我有一个样式的列表框。这个样式的ListBox基于Grid
的3列布局。网格本身包含一个Image
和两个TextBlock
元素。到目前为止一切都很顺利。现在我想创建一个触发器来更改列的格式和内容。
目前我已经设法有触发器在网格内的textblock,这是工作良好。请看下面的代码
<Style TargetType="ListBox" x:Key="strechedItemStyle">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.Resources>
<Style x:Key="txtActive" TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Grid.Column" Value="0"></Trigger>
<DataTrigger Binding="{Binding Path=IsActive}" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Text" Value="(Active)"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsActive}" Value="False">
<Setter Property="FontWeight" Value="Normal"/>
<Setter Property="Text" Value=""/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="../Images/copy.png" Height="16" Width="16" HorizontalAlignment="Left" Grid.Column="0" Margin="2 0 5 0" />
<TextBlock Style="{StaticResource txtActive}" Text="{Binding Path=Name}" HorizontalAlignment="Left" Name="EnvName" Grid.Column="1"/>
<TextBlock Style="{StaticResource txtActive}" Name="Active" HorizontalAlignment="Right" Margin="0 0 5 0" Grid.Column="2">
</TextBlock>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
但是我真的不喜欢必须以这种方式为每个列设置样式的方法,特别是因为我正在更改列的内容而不是列本身,或者这是错误的想法吗?如果我不知道一列的内容怎么办?
我宁愿在网格上有一个触发器,即改变整行的Font-Weight。
或者:是否有一种方法如何在单个网格列上触发而不是它们的内容?
如果你想在网格样式上设置一个触发器的字体重量,你只需要这样做:
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsActive}" Value="True">
<Setter Property="TextBlock.FontWeight" Value="Bold"/>
<Setter Property="TextBlock.Text" Value="(Active)"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>