WPF: как установить свойство Foreground TextBlock с помощью DataTrigger - PullRequest
7 голосов
/ 27 января 2010

Это мой XAML:

<TextBlock Name="SeverityText"
           Grid.Column="1"
           Grid.Row="0"
           Foreground="Red">
    <TextBlock.Triggers>

        <DataTrigger Binding="{Binding Path=Severity}">
            <DataTrigger.Value>
                <sm:Severity>Warning</sm:Severity>
            </DataTrigger.Value>
            <Setter TargetName="SeverityText"
                    Property="Foreground"
                    Value="Yellow" />
        </DataTrigger>
                 <DataTrigger Binding="{Binding Path=Severity}">
            <DataTrigger.Value>
                <sm:Severity>Information</sm:Severity>
            </DataTrigger.Value>
            <Setter TargetName="SeverityText"
                    Property="Foreground"
                    Value="White" />
        </DataTrigger>


    </TextBlock.Triggers>
    <TextBlock>Severity:</TextBlock>
    <TextBlock Text="{Binding Path=Severity}" />
</TextBlock>

Это мое сообщение об ошибке:

Не удалось найти статический член 'ForegroundProperty' для типа 'ContentPresenter'.

sm: Серьезность - это перечисление, которое я импортировал.

Ответы [ 2 ]

11 голосов
/ 27 января 2010

Ваши триггеры и сеттеры должны быть определены в стиле, а не непосредственно в TextBlock:

<TextBlock>
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>

               <DataTrigger Binding="{Binding Severity}"> 
                   <DataTrigger.Value> 
                       <sm:Severity>Warning</sm:Severity> 
                   </DataTrigger.Value> 
                   <Setter TargetName="SeverityText" 
                           Property="Foreground" 
                           Value="Yellow" /> 
               </DataTrigger>

            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>
4 голосов
/ 16 октября 2012

Написание полного пути к недвижимости также работает:
Итак

Property = "Foreground" -> Property = "TextBlock.Foreground"

Однако, как предложено в предыдущем ответе, вы получите:

System.InvalidOperationException: члены коллекции триггеров должны иметь тип EventTrigger.


... если не выразить это в стиле.

...