可以在Silvelright中本地化DataPager的页脚(第X页,共Y页)吗?
这些字符串似乎位于嵌入在DataPager程序集中的资源中。那么我应该如何本地化它呢?
不幸的是,DataPager类中几乎没有任何东西是虚拟的,而且它还使用了许多内部类,因此不可能(至少很容易)继承DataPager并覆盖该行为。
发布于 2010-03-12 18:22:05
因此,还有另一种解决方案-更改DLL中的资源。
该解决方案基于this article。
因为System.Controls.Data.dll是由MS签名的,所以我需要删除签名(强名称)。我使用AdmiralDebilitate删除了它。
ildasm System.Controls.Data.dll
System.Controls.Data.il
/resource=System.Controls.Data.res /dll /output=System.Controls.Data.dll ilasm
有两个可能的问题:
发布于 2010-04-23 21:42:30
这很简单。查看我如何将DataPager本地化为葡萄牙语:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace MarceloOliveira.Controls
{
/// <summary>
/// Customização feita sobre o Data Pager padrão do Silverlight, para traduzir para o português
/// </summary>
public class CustomDataPager : DataPager
{
TextBlock currentPagePrefixTextBlock;
TextBlock currentPageSuffixTextBlock;
TextBox currentPageTextBox;
public CustomDataPager() : base()
{
this.PageIndexChanged += new EventHandler<EventArgs>(CustomDataPager_PageIndexChanged);
this.MouseLeftButtonDown += new MouseButtonEventHandler(CustomDataPager_MouseLeftButtonDown);
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
currentPagePrefixTextBlock = GetTemplateChild("CurrentPagePrefixTextBlock") as TextBlock;
currentPageSuffixTextBlock = GetTemplateChild("CurrentPageSuffixTextBlock") as TextBlock;
currentPageTextBox = GetTemplateChild("CurrentPageTextBox") as TextBox;
currentPageTextBox.TextChanged += new TextChangedEventHandler(currentPageTextBox_TextChanged);
currentPageSuffixTextBlock.SizeChanged += new SizeChangedEventHandler(currentPageSuffixTextBlock_SizeChanged);
}
void currentPageTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
TranslateLabels();
}
void CustomDataPager_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TranslateLabels();
}
void CustomDataPager_PageIndexChanged(object sender, EventArgs e)
{
TranslateLabels();
}
void currentPageSuffixTextBlock_SizeChanged(object sender, SizeChangedEventArgs e)
{
TranslateLabels();
}
private void TranslateLabels()
{
if (currentPagePrefixTextBlock != null)
{
currentPagePrefixTextBlock.Text = "Pág.";
currentPageSuffixTextBlock.Text = string.Format("de {0}", this.PageCount);
}
}
}}
发布于 2010-02-18 00:34:46
到目前为止,我找到的唯一解决方案是编辑DataPager的模板,删除负责显示“页面”和"of X“的两个文本框并创建新的文本框。然后,继承DataPager,覆盖OnApplyTemplate以附加到新的TextBoxes。
最后一部分是最棘手的-你必须处理你的数据源的适当事件(这取决于数据源),并更新你的新文本框的文本。
虽然这个解决方案应该是可行的,但它并不是很好。
https://stackoverflow.com/questions/2281958
复制相似问题