Изменение цвета переднего плана надписи с помощью триггеров стиля - PullRequest
0 голосов
/ 10 января 2012

Я создал стиль для метки, который должен менять цвет переднего плана в зависимости от значения свойства «IsEnabled»:

<Style x:Key="ToggleLabelStyle" TargetType="{x:Type Label}">
    <Style.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource DisabledToggleTextBrush}"/>
        </Trigger>
    </Style.Triggers>
   (...)
</Style>

Один из моих элементов управления имеет метку с примененным этим стилем. Свойство «IsEnabled» метки привязано к свойству в View-Model элемента управления:

Просмотр XAML:

<Label x:Name="RememberCredentialsLabel" Style="{DynamicResource ToggleLabelStyle}" IsEnabled="{Binding SaveCredentials}" Content="Remember Credentials" Grid.Column="1" Margin="0,28.849,39.339,10.124" Grid.Row="3" HorizontalAlignment="Right" Width="130.5" Foreground="White"/>

View-Model Свойство:

public bool SaveCredentials
{
    get
    {
        return _saveCredentials;
    }
    set
    {
        _saveCredentials = value;
        RaisePropertyChanged(() => SaveCredentials);
    }
}

Свойство правильно связано, и элемент управления получает предупреждение при изменении его значения. Проблема в том, что цвет переднего плана этикетки никогда не меняется. Я попытался жестко запрограммировать значение для переднего плана в стиле (например, красный), но оно все равно не изменилось.

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

Почему я не могу изменить значение переднего плана из триггера в стиле?

Я использую Expression Blend 4, а также редактирую код вручную. Я также использую PRISM 4.

Ответы [ 2 ]

4 голосов
/ 10 января 2012

Вы не должны устанавливать Forground для самого Label, локальное значение переопределит триггер стиля из-за приоритета . Триггер, таким образом, не влияет на Foreground.

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

1 голос
/ 10 января 2012

Просто угадайте:

Мне кажется, что в Label определение Foreground="White" должно быть удалено, поскольку оно преодолевает определение стиля. Вместо этого добавьте

<Trigger Property="IsEnabled" Value="True">
       <Setter Property="Foreground" Value="White"/>
   </Trigger>

Должно работать ...

...