我的问题类似于WPF网格-如何为一列应用样式?但适用于ListView
内部的GridView
我试图应用一个触发器,仅在GridView
的给定列中更改TextBlock
内的文本颜色。如果我去掉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列受到多触发器的影响?
[编辑1]添加代码GridView
[EDIT 2]我修改了最后一个GridViewColumn
给它自己的风格
[EDIT 3]删除DisplayMemberBinding
并添加Setter
属性…它是有效的:)。
更新源代码以反映正确答案
最简单的方法就是将样式移动到列的模板中:
<GridViewColumn Width="90" Header="Status">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Status}">
<TextBlock.Style>
<!-- Style here without additional condition -->
你需要使用多重绑定并传递GridViewColumn &将GridView转换为转换器,它决定COLUMN号。你可以使用自动工作的RelativeSource绑定来传递这些。据我所知,没有"Column"属性。
在converter中你做GridView.Columns.IndexOf(YourColumn)。或者你只是改变你的视图模型,并添加新的属性,"StyleColumn",并使用可绑定列WPF MVVM:如何绑定GridViewColumn到viewmodel - collection ?