WPF重新评估样式触发器

WPF重新评估样式触发器,wpf,localization,setter,datatrigger,wpf-style,Wpf,Localization,Setter,Datatrigger,Wpf Style,我的应用程序支持英语和西班牙语的本地化。我有一个textlabel,它根据物业的使用年限应用不同的样式。 例如,如果本地化设置为英语: 如果年龄文本=未满年龄[红色] 如果年龄>18->文本=超龄[绿色] 如果年龄=18->文本=18岁[蓝色] 这可以很好地使用此代码: <TextBlock Margin="5,0,0,0"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"&g

我的应用程序支持英语和西班牙语的本地化。我有一个textlabel,它根据物业的使用年限应用不同的样式。 例如,如果本地化设置为英语:

如果年龄<18->文本=未满年龄[红色]

如果年龄>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属性,因此标签仍以英语显示。

有没有办法强制重新评估

更新:

我已经将我的本地化库更新为这个:它现在支持样式。 但是,现在它在编译上述XAML代码时崩溃了。错误显示:

“LocExtension对Setter.Value无效。只支持 MarkupExtension类型为DynamicResoruceExtension和BindingBase或 派生类型。”

是否有任何方法可以实现我使用trigger但使用LocExtension支持的任何方法的相同目的

  • strUnderAge
    定义为实现
    INotifyPropertyChanged
    接口的类中的属性

  • 将触发器绑定到
    strUnderAge
    属性

  • 更改语言时,引发
    PropertyChanged
    事件


  • 否则触发器无法知道语言已更改。

    是您的模型,其中
    strUnderAge
    属性实现了
    INotifyPropertyChanged
    接口?strUnderAge不是属性。这是一个键,用于获取CodeProject thing声明的相应资源文件(取决于CultureInfo)中的值(我尚未验证声明),如果设置
    LocalizationManager.UICulture
    ,则
    Loc
    将更新。这就是你为改变文化所做的吗?是的,EdPlunkett。这正是我所做的。嗨,谷歌粉丝,我不知道该怎么做,因为我使用的是第三方本地化解决方案,这里解释道:你带来的链接中的解决方案不适合Trigger,Trigger无法知道语言已经改变