GridView的一列上的触发器样式

时间:2013-05-17 03:55:28

标签: wpf xaml gridview textblock multitrigger

我的问题类似于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属性......它有效:)。

更新了源代码以反映正确答案。

2 个答案:

答案 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?