实际上,这个MarkupExtension将其应用到的属性绑定到字符串"My default aRa">
我在我的WPF应用程序中使用MarkupExtension继承,我想将它移植到Silverlight下。
我做了一个"Locale“标记扩展,可以像这样在xaml中使用
<TextBlock Text="{ui:Locale aRandomId,'My default translation'}" />
实际上,这个MarkupExtension将其应用到的属性绑定到字符串"My default aRandomId“,或者,如果找到,则绑定到存储在名为"aRandomId”的数据库中的句子。
这个MarkupExtension允许我动态地更改UI的区域设置(标记扩展注册到一个弱事件'LocaleChanged‘,它会触发与它绑定的每个属性的更新)
由于我们不能继承Silverlight中的MarkupExtension,我想知道是否有某种机制可以取代它。
谢谢。
PS :如果需要,我可以提供这个MarkupExtension的来源。
发布于 2011-09-12 04:05:31
为了达到这个目的,我使用了转换器和ConverterParam:
这是很容易做到的,但当你开始在你的应用程序中有很多它们的时候,它感觉非常简单。
更新:,也许我把你的需求复杂化了.在我的应用程序中,我有两个使用模式,一个有转换器,另一个没有。在最简单的情况下,我只想为本地化字典提取一个字符串,它看起来如下:
Text="{Binding Localization[my_string_key], Source={StaticResource ViewModelLocator}}"
发布于 2011-09-12 04:19:42
我知道这将得到许多传统的答案,但我也想提出一些完全原创的东西--我们尝试过(并成功地)使用附加属性(而不是绑定)来更有效地本地化Silverlight:
我们发现资源和绑定解决方案是乏味和不灵活的,因为它们都需要在项目中设置翻译(因此需要重新部署应用程序)。
此外,所选语言的硬性也会发生变化,当它改变时,所有的字符串都会同时发生变化。如果语言发生变化,只需重新生成当前页面,为此目的进行绑定的开销就显得疯狂了。
传统上,翻译是分批发送的,并由语言(具有独特的键、译者注释等)进行管理,因此我们发现这也更适合。
我们的解决方案意味着我们在中央服务器数据库中管理本地化,但也可以在应用程序本身内提供本地化编辑器,供翻译器在使用应用程序时使用。
https://stackoverflow.com/questions/7387512
复制相似问题