Триггеры WPF - PullRequest
       27

Триггеры WPF

6 голосов
/ 11 февраля 2009

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

Мне удалось отобразить изображение в той же ситуации, но в этом случае мне не нужно изображение, но текст.

Закомментировали строки для test.try, чтобы он заработал. Закомментированный код работает! Текст в текстовом блоке = ххх внутри, нет.

Это мои попытки

<wpfToolkit:DataGridTemplateColumn Header="P" Width="20">
    <wpfToolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <!-- <DataTemplate.Triggers> -->
            <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1"> -->
            <TextBlock Text="XXX" />
            <!-- </DataTrigger> -->
            <!-- <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2"> -->
            <!-- <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/> -->
            <!-- </DataTrigger> -->
            <!-- </DataTemplate.Triggers> -->
        </DataTemplate>
    </wpfToolkit:DataGridTemplateColumn.CellTemplate>
</wpfToolkit:DataGridTemplateColumn>

Ответы [ 3 ]

4 голосов
/ 11 февраля 2009

Установите содержимое DataTemplate на TextBlock и установите видимость на основе триггера. Я не уверен, для чего нужен второй DataTrigger, потому что он ссылается на целевое имя, которого нет в текущей области, поэтому я не знаю, как оно вписывается.

<DataTemplate>
    <TextBlock x:Name="block" Text="XXX" Visibility="Collapsed"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
            <Setter TargetName="block" Property="Visibility" Value="Visible"/>
        </DataTrigger>
        <!--<DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
            <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/>
        </DataTrigger>-->
    </DataTemplate.Triggers>
</DataTemplate>
1 голос
/ 12 февраля 2009

Блестящий! Спасибо, куча:)

Это то, чем я закончил. Если PrecedenceIndicator = 1, отобразить!, Если PrecendenceIndicator = 2, отобразить !!.

<wpfToolkit:DataGridTemplateColumn Header="A" Width="20">
    <wpfToolkit:DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock>
                <TextBlock x:Name="block1" Text="&#x21;" Visibility="Collapsed"/>
                <TextBlock x:Name="block2" Text="&#x21; &#x21;" Visibility="Collapsed"/>
            </TextBlock>
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
                    <Setter TargetName="block1" Property="Visibility" Value="Visible"/>
                </DataTrigger>
               <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
                    <Setter TargetName="block2" Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </wpfToolkit:DataGridTemplateColumn.CellTemplate>
</wpfToolkit:DataGridTemplateColumn>
0 голосов
/ 11 февраля 2009

Вам необходимо изменить тип DataTemplate на основе вашего триггера с Image на TextBox.

<DataTemplate>
    <ContentPresenter x:Name="Presenter" />

    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="1">
            <Setter TargetName="Presenter" Property="Content">
                <Setter.Value>
                    <TextBlock Text="XXX" />
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding PrecedenceIndicator}" Value="2">
            <Setter TargetName="cablePrecedenceIndicatorImage" Property="Source" Value="Resources\Images\small_exclamation_mark.png"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>
...