DataTriggers строк в сетке WPF - PullRequest
       45

DataTriggers строк в сетке WPF

0 голосов
/ 20 ноября 2011

У меня есть 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>

Но мне не очень нравится подход к стилизации каждого столбца таким образом, особенно потому, что я изменяю содержимое столбца, а не сам столбец, или этонеправильное мышление?Что если я не знаю содержимого столбца?

Я бы предпочел, чтобы в сетке был один триггер, то есть изменение веса шрифта для всей строки.

В качестве альтернативы: Есть ли способ, как иметь триггер на отдельных столбцах таблицы, а не их содержимое?

1 Ответ

0 голосов
/ 20 ноября 2011

Если вы хотите установить вес шрифта одним триггером в стиле сетки, вам просто нужно сделать это:

<Grid.Style>
    <Style TargetType="Grid">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsActive}" Value="True">
                <Setter Property="TextBlock.FontWeight" Value="Bold"/>
                <Setter Property="TextBlock.Text" Value="(Active)"/>
        </DataTrigger>
        </Style.Triggers>
    </Style>
</Grid.Style>
...