Как я могу заставить триггер изменять цвет TextBlock на основе Свойства DataContext?

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

Для этого вы можете закодировать класс, который получает строку и возвращает класс в зависимости от входной строки.

Взгляните на книгу Эриха Гамма «Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения»; Ричард Хелм; Ральф Джонсон; Джон Влиссидес.

6
задан abatishchev 20 June 2012 в 06:26
поделиться

2 ответа

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

Используйте стиль для достижения желаемого:

<Style x:Key="Triggers" TargetType="TextBlock">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Status}" Value="off">
            <Setter Property="TextBlock.Background" Value="Red"/>
        </DataTrigger>
    </Style.Triggers>
</Style>

Следующие объекты имеют коллекции триггеров, которые могут содержать перечисленные типы триггеров :

FrameworkElement     Style, ControlTemplate, DataTemplate
----------------     ------------------------------------
EventTrigger         EventTrigger
                     Trigger or MultiTrigger
                     DataTrigger or MultiDataTrigger
12
ответ дан 8 December 2019 в 05:57
поделиться

Вы можете сделать это в стиле:

<TextBlock Text="{Binding Status}">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Status}" Value="off">
                    <Setter Property="Background" Value="Red"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
9
ответ дан 8 December 2019 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: