Стиль запуска на одном столбце GridView

Мой вопрос похож на WPF Grid - Как применить стиль только для одного столбца? но относится к 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-й столбец, содержащий текстовый блок?

[EDIT 1] Добавлен код для GridView

[РЕДАКТИРОВАТЬ 2] Я изменил последний GridViewColumn придать ему свой стиль

[РЕДАКТИРОВАТЬ 3] Удалено DisplayMemberBinding и добавил Setter собственность... это работает:).

Обновлен исходный код для отражения правильного ответа.

2 ответа

Решение

Проще всего было бы перенести стиль в шаблон столбца:

<GridViewColumn Width="90" Header="Status">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Status}">
                <TextBlock.Style>
                     <!-- Style here without additional condition -->

Вам нужно будет использовать мульти-связывание и передать GridViewColumn & GridView в конвертер, который решает число COLUMN. Вы можете передать те, которые используют привязку RelativeSource, которая будет работать автоматически. Насколько я могу судить, свойства "Column" нет.

В конвекторе вы делаете GridView.Columns.IndexOf(YourColumn). В качестве альтернативы вы просто изменяете свою модель представления и добавляете новое свойство "StyleColumn" и используете привязываемые столбцы WPF MVVM: как связать GridViewColumn с ViewModel-Collection?

Другие вопросы по тегам