Silverlight DataPager 本地化
是否可以在 Silvelright 中本地化 DataPager 的页脚(第 X 页,共 Y 页)?
这些字符串似乎位于 DataPager 程序集中嵌入的资源中。那么我应该如何本地化它呢?
不幸的是,DataPager 类中几乎没有任何内容是虚拟的,而且它还使用了许多内部类,因此不可能(至少很容易)继承 DataPager 并重写其行为。
Is it possible to localize DataPager's footer (Page X of Y) in Silvelright?
The strings seem to be located in resources embedded in the assembly of DataPager. So how should I localize it?
Unfortunately, almost nothing in the DataPager class is virtual and also many internal classes are used by it, so it is not possible (at least easily) to inherit DataPager and override the behavior.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这很简单。了解我如何将 DataPager 本地化为葡萄牙语:
}
That's pretty simple. See how I localized DataPager for Portuguese language:
}
到目前为止我发现的唯一解决方案是编辑DataPager的模板,删除负责显示“Page”和“of X”的两个文本框并创建新的文本框。然后,继承 DataPager,重写 OnApplyTemplate 以附加到新的 TextBox。
最后一部分是最棘手的 - 您必须处理数据源的正确事件(这取决于数据源)并更新新文本框的文本。
虽然这个解决方案应该可行,但它不是很好......
The only solution I've found out so far is to edit the template of DataPager, remove the two textboxes responsible for displaying "Page" and "of X" and create new ones. Then, inherit DataPager, override OnApplyTemplate to attach to your new TextBoxes.
The last part is the trickiest - you have to handle proper events of your datasource (it depends on the datasource) and update text of your new textboxes.
Although this solution should work, it is not very nice...
因此,还有另一种解决方案——更改DLL中的资源。
该解决方案基于本文。
由于 System.Controls.Data.dll 是由 MS 签名的,因此我需要删除签名(强名称)。我使用 AdmiralDebilitate 删除它。
通过命令反汇编dll
ildasm /out=System.Controls.Data.il System.Controls.Data.dll
使用任何资源编辑器(我使用Resource.net)打开System.Windows.Controls.DataPager。 PagerResources.resources。
通过命令重新组装组件
ilasm /resource=System.Controls.Data.res /dll /output=System.Controls.Data.dll System.Controls.Data.il
完成。
有两个可能的问题:
So, there is another solution - changing the resources in the DLL.
The solution is based on this article.
Since the System.Controls.Data.dll is signed by MS, I needed to remove the signature (strong name). I used AdmiralDebilitate to remove it.
Disassemble the dll by command
ildasm /out=System.Controls.Data.il System.Controls.Data.dll
Use any resource editor (I used Resource.net) to open System.Windows.Controls.DataPager.PagerResources.resources.
Reassemble the assembly by command
ilasm /resource=System.Controls.Data.res /dll /output=System.Controls.Data.dll System.Controls.Data.il
Done.
There are two possible problems:
只需将您需要的文化添加到项目文件中的SupportedCultures 元素中,例如,
现在DataPager 在德国计算机上使用德语资源。
Just add the cultures you need to the SupportedCultures element in the project file, e.g.
Now the DataPager uses German resources on German computers.
另一种选择是删除“后缀”文本块并添加您自己的文本块并绑定到 DataPager 的 PageCount 属性:
Another option is to remove the "suffix" textblock and add in your own with a binding to the PageCount property of the DataPager: