我的应用程序支持英语和西班牙语的本地化。我有一个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的任何支持方法?
答案 0 :(得分:2)
将strUnderAge
定义为实现INotifyPropertyChanged
接口的类中的属性。
将触发器绑定到strUnderAge
属性。
更改语言时会引发PropertyChanged
事件。
否则触发器无法知道语言是否已更改。