WPF переоценивает триггеры стиля

Мое приложение поддерживает локализацию на английском и испанском языках. У меня есть текстовая метка, которая в зависимости от свойства Age применяет разные стили. Например, если Локализация установлена ​​на английский:

Если Возраст < 18 -> Текст = Под возрастом [в красном цвете]

Если Возраст> 18 -> Текст = По возрасту [зеленым цветом]

Если Возраст == 18 -> Текст = На восемнадцать [в цвете синий]

Это работает нормально с этим кодом:

<TextBlock Margin="5,0,0,0">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=Age,
                    Converter={StaticResource CuttoffConverter}, ConverterParameter=18}"
                             Value="False">
                    <Setter Property="Text" Value="{Loc strUnderAge}"/>
                    <Setter Property="Foreground" Value="Red"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=Age,
                    Converter={StaticResource CuttoffConverter}, ConverterParameter=18}"
                             Value="True">
                    <Setter Property="Text" Value="{Loc strOverAge}"/>
                    <Setter Property="Foreground" Value="Green"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding Age}" Value="18">
                    <Setter Property="Text" Value="{Loc strOnEighteen}"/>
                    <Setter Property="Foreground" Value="Blue"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

Часть локализации покрыта тегом {Loc XXXXXX} и работает нормально, за исключением следующего: если язык изменяется "в эфире", свойства этого DataTrigger Setter не пересматриваются, поэтому метки по-прежнему отображаются на английском языке.

Есть ли способ заставить переоценить?

ОБНОВИТЬ:

Я обновил свою библиотеку локализации до этой: WPF Localization Advanced, которая теперь поддерживает стили. Однако теперь он ломается при компиляции вышеуказанного кода XAML. Ошибка говорит:

"LocExtension недопустимо для Setter.Value. Единственными поддерживаемыми типами MarkupExtension являются DynamicResoruceExtension и BindingBase или производные типы."

Есть ли способ достичь той же цели, что я сделал с триггером, но с помощью любого из поддерживаемых методов LocExtension?

1 ответ

  1. определять strUnderAge как свойство в классе, который реализует INotifyPropertyChanged Интерфейс.

  2. привязать курок к strUnderAge имущество.

  3. когда вы меняете язык, поднимите PropertyChanged событие.

В противном случае триггер не может знать, что язык изменился.

Другие вопросы по тегам