我的问题类似于WPF Grid - How to apply a style for just one column?,但适用于GridView
内的ListView
我正在尝试应用一个触发器,该触发器仅在TextBlock
内的给定列中更改GridView
内的文本颜色。如果我删除评论THIS
行,则该行中的每个文本块都会受到影响。
<ListView>
<ListView.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="White" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView x:Name="MyGridView" ColumnHeaderContainerStyle="{StaticResource GridViewColumnHeaderStyleNew}">
<GridViewColumn Width="90" Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Width="90" Header="Option" DisplayMemberBinding="{Binding Option}"/>
<GridViewColumn Width="90" Header="Dir" DisplayMemberBinding="{Binding Directory}"/>
<GridViewColumn Width="90" Header="Size" DisplayMemberBinding="{Binding Size}"/>
<GridViewColumn Width="90" Header="Status" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="White" />
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="Overheating">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Foreground.Color" From="White" To="Red" Duration="0:0:2" AutoReverse="True" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
对该行的哪些更改会使得只有包含文本块的5 th 列受到多重触发器的影响?
[编辑1] 添加了GridView
[编辑2] 我修改了最后一个GridViewColumn
以赋予它自己的风格
[编辑3] 删除了DisplayMemberBinding
并添加了Setter
属性......它有效:)。
更新了源代码以反映正确答案。
答案 0 :(得分:2)
最简单的方法是将样式移动到列的模板中:
<GridViewColumn Width="90" Header="Status">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}">
<TextBlock.Style>
<!-- Style here without additional condition -->
答案 1 :(得分:0)
您需要使用多重绑定并传递GridViewColumn&amp; GridView进入转换器,它决定了COLUMN号。您可以使用可自动运行的RelativeSource绑定传递它们。据我所知,目前没有“专栏”属性。
在conveter中你做GridView.Columns.IndexOf(YourColumn)。或者,您只需更改视图模型并添加新属性“StyleColumn”,并使用可绑定列WPF MVVM: how to bind GridViewColumn to ViewModel-Collection?