相关疑难解决方法(0)

使用DataBinding值的MarkupExtension

我正在尝试创建一个WPF MarkupExtension类,它从我的文本翻译类提供翻译文本.翻译的东西效果很好,但需要使用文本键进行静态方法调用以返回翻译的文本.像这样:

ImportLabel.Text = Translator.Translate("import files");
// will be "Dateien importieren" in de or "Import files" in en
Run Code Online (Sandbox Code Playgroud)

它的特点是它接受计数值以提供更好的措辞.

ImportLabel.Text = Translator.Translate("import n files", FileCount);
// will be "Import 7 files" or "Import 1 file"
Run Code Online (Sandbox Code Playgroud)

另一个例子:如果事情还需要4分钟,那么它只需要一分钟即可.如果文本键"minutes"被定义为任何数字的"Minuten"而计数为1的"Minute",则以下方法调用将返回要使用的右词:

Translator.Translate("minutes", numberOfMinutes)
// will be "minute" if it's 1, and "minutes" for anything else
Run Code Online (Sandbox Code Playgroud)

现在在WPF应用程序中,有很多XAML代码,其中包含大量文字文本.为了能够翻译它们而不必坚持,我需要一个标记扩展,我可以传递我的文本键,并将在运行时返回翻译的文本.这部分相当容易.创建一个继承自MarkupExtension的类,添加一个接受文本键作为参数的构造函数,将其存储在私有字段中,并让其ProvideValue方法返回存储键的翻译文本.

我真正的问题是:如何使我的标记扩展接受计数值,使其受数据限制,并且当计数值发生变化时,翻译文本将相应地更新?

它应该像这样使用:

<TextBlock Text="{t:Translate 'import files', {Binding FileCount}}"/>
Run Code Online (Sandbox Code Playgroud)

每当FileCount的绑定值发生更改时,TextBlock都必须接收新的文本值以反映更改,并仍然提供良好的措辞.

我在那里找到了一个类似的解决方案:http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection. aspx但是,尽管我努力遵循它,但我无法理解它的作用或为什么它会起作用.似乎所有事情都发生在WPF中,提供的代码只会将其推向正确的方向,但目前还不清楚如何.我不能让我适应它做任何有用的事情.

我不确定在运行时让翻译语言发生变化是否有用.我想我需要另一级别的绑定.为了保持低复杂性,我不打算在基本版本工作之前这样做.

目前没有代码可以告诉你.它只是处于一种可怕的状态,它唯一能做的就是抛出异常,或者不翻译任何东西.任何简单的例子都非常受欢迎(如果在这种情况下存在这样的事情).

data-binding wpf markup-extensions

9
推荐指数
1
解决办法
5477
查看次数

标签 统计

data-binding ×1

markup-extensions ×1

wpf ×1