Стиль запуска на одном столбце 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?