У меня есть ListBox со стилем. Этот стиль размещает ListBox с макетом из 3 столбцов на основе Grid
. Сама сетка содержит элемент Image
и два элемента TextBlock
. Пока все работает нормально. Теперь я хочу создать триггер, который меняет форматирование и содержимое столбцов.
В настоящее время мне удалось установить триггеры на TextBlocks в сетке, которая работает нормально. См. следующий код
<Style TargetType="ListBox" x:Key="strechedItemStyle">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid.Resources>
<Style x:Key="txtActive" TargetType="TextBlock">
<Style.Triggers>
<Trigger Property="Grid.Column" Value="0"></Trigger>
<DataTrigger Binding="{Binding Path=IsActive}" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Text" Value="(Active)"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsActive}" Value="False">
<Setter Property="FontWeight" Value="Normal"/>
<Setter Property="Text" Value=""/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Image Source="../Images/copy.png" Height="16" Width="16" HorizontalAlignment="Left" Grid.Column="0" Margin="2 0 5 0" />
<TextBlock Style="{StaticResource txtActive}" Text="{Binding Path=Name}" HorizontalAlignment="Left" Name="EnvName" Grid.Column="1"/>
<TextBlock Style="{StaticResource txtActive}" Name="Active" HorizontalAlignment="Right" Margin="0 0 5 0" Grid.Column="2">
</TextBlock>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Но мне не очень нравится такой подход к стилю каждого столбца, особенно потому, что я изменяю содержимое столбца, а не сам столбец, или это неправильное мышление? Что делать, если я не знаю содержимого столбца?
Я бы предпочел иметь один триггер в сетке, то есть изменение Font-Weight для всей строки.
В качестве альтернативы: есть ли способ иметь триггер для отдельных столбцов сетки, а не для их содержимого?