У меня есть 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>
Но мне не очень нравится подход к стилизации каждого столбца таким образом, особенно потому, что я изменяю содержимое столбца, а не сам столбец, или этонеправильное мышление?Что если я не знаю содержимого столбца?
Я бы предпочел, чтобы в сетке был один триггер, то есть изменение веса шрифта для всей строки.
В качестве альтернативы: Есть ли способ, как иметь триггер на отдельных столбцах таблицы, а не их содержимое?