Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight中MarkupExtension继承的替代方案_C#_Wpf_Silverlight_Markup Extensions - Fatal编程技术网

C# Silverlight中MarkupExtension继承的替代方案

C# Silverlight中MarkupExtension继承的替代方案,c#,wpf,silverlight,markup-extensions,C#,Wpf,Silverlight,Markup Extensions,我在我的WPF应用程序中使用MarkupExtension继承,我想在Silverlight下移植它 我制作了一个区域设置标记扩展,可以在xaml中像这样使用 <TextBlock Text="{ui:Locale aRandomId,'My default translation'}" /> 事实上,此MarkupExtension将其应用的属性绑定到字符串My default translation,或者,如果找到,绑定到存储在名为aRandomId的数据库中的句子 此Mark

我在我的WPF应用程序中使用MarkupExtension继承,我想在Silverlight下移植它

我制作了一个区域设置标记扩展,可以在xaml中像这样使用

<TextBlock Text="{ui:Locale aRandomId,'My default translation'}" />
事实上,此MarkupExtension将其应用的属性绑定到字符串My default translation,或者,如果找到,绑定到存储在名为aRandomId的数据库中的句子

此MarkupExtension允许我动态更改UI的区域设置MarkupExtension正在注册到一个弱事件“LocaleChanged”,该事件会触发与其绑定的每个属性的更新

由于我们无法继承Silverlight中的MarkupExtension,我想知道是否有某种机制可以替代它

谢谢


PS:如果需要,我可以提供此标记扩展的来源。

为此,我使用了转换器和转换器参数:

这很容易做到,但当你开始在你的应用程序中有很多这样的东西时,感觉非常简单

更新: 也许我把你的需求复杂化了。。。在我的应用程序中,我有两种使用模式,一种是带转换器的,另一种是不带转换器的。在最简单的情况下,我只想为本地化字典提取一个字符串,它如下所示:

Text="{Binding Localization[my_string_key], Source={StaticResource ViewModelLocator}}"

我知道这会得到很多传统的答案,但我也想提出一些完全原创的东西,我们尝试并成功地利用附加属性而不是绑定来实现Silverlight的更高效本地化:

我们发现资源和绑定解决方案非常单调,而且不灵活,因为它们都需要在项目中设置翻译,因此在应用程序发生更改时需要重新部署应用程序

此外,所选语言hardy会不断更改,当它更改时,所有字符串都会同时更改。如果语言发生变化,只需重新生成当前页面,那么为实现这一目的而承担绑定开销似乎是疯狂的

传统上,翻译是分批发送的,并由语言管理,具有唯一的键、翻译注释等,因此我们发现这也更适合那里

我们的解决方案意味着我们在中央服务器数据库中管理本地化,但也可以在应用程序本身中提供本地化编辑器,供翻译人员在使用应用程序时使用

任何语言的中央存储库 通过在大型应用程序上下载每种语言最多200kb的新数据来更改语言 仅下载所需语言,并随时更改 支持应用程序内翻译人员编辑资源,但这需要额外的UI表单。
... 但是转换器不能使属性在事件发生时更新:它们具有被动行为。它们不会对绑定进行任何更改,因此如果绑定的属性发生更改,文本将更改,并再次通过转换器。我正在动态加载我的本地化文件,我可以向您保证,文本从“区域设置错误”更改为正确的值。好的。。。我道歉:我想我终于明白你的意思了。但这种方法有点棘手:它迫使编码者添加UI必须绑定的属性:我愿意用xaml声明我的可翻译句子,在模型部分没有属性或代码。好吧,为了更好地解释我得到的:我有一个字符串键值对字典,它在我的ViewModelLocator中声明。所以我只有一个绑定目标。。。。有趣的:等待第三部分;我唯一的遗憾是开发人员所做的努力:每次我创建一个页面时,为每个页面提供一个ID来提醒这种事情是非常困难的,你是第一个真正要求第3页的人,所以我们现在可以发布它了:我们实际上是用同样的工具生成页面ID的,这个工具将我们最初的程序员英语解析到数据库中来预填充它。该ID仅用于交互式编辑,不用于翻译,仅用于非常酷的附加内容。目前,它在我的待办事项列表中有一长串:嗯。。。我完全可以理解!祝你好运