WPF重新评估样式触发器

时间:2017-09-30 18:38:31

标签: wpf localization setter datatrigger wpf-style

我的应用程序支持英语和西班牙语的本地化。我有一个textlabel,根据属性Age,它应用不同的样式。 例如,如果Localization设置为English:

如果年龄< 18 - >文字=年龄不足[红色]

如果年龄> 18 - >文字=年龄超过[绿色]

如果年龄== 18 - > Text = On 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}标记覆盖,除此之外它工作正常:如果语言被更改&#34;播出&#34;,此DataTrigger Setter属性不会重新评估,因此标签仍以英文显示。

有没有办法强行重新评估?

更新

我已将我的本地化库更新为此版本:WPF Localization Advanced现在支持样式。 但是,现在它在编译上面的XAML代码时会中断。错误说:

  

&#34; LocExtension对Setter.Value无效。唯一支持的   MarkupExtension类型是DynamicResoruceExtension和BindingBase或   派生类型。&#34;

有没有办法实现与触发器相同的目的,但使用LocExtension的任何支持方法?

1 个答案:

答案 0 :(得分:2)

  1. strUnderAge定义为实现INotifyPropertyChanged接口的类中的属性。

  2. 将触发器绑定到strUnderAge属性。

  3. 更改语言时会引发PropertyChanged事件。

  4. 否则触发器无法知道语言是否已更改。