首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight DataPager本地化

Silverlight DataPager本地化
EN

Stack Overflow用户
提问于 2010-02-17 23:33:03
回答 5查看 2.4K关注 0票数 2

可以在Silvelright中本地化DataPager的页脚(第X页,共Y页)吗?

这些字符串似乎位于嵌入在DataPager程序集中的资源中。那么我应该如何本地化它呢?

不幸的是,DataPager类中几乎没有任何东西是虚拟的,而且它还使用了许多内部类,因此不可能(至少很容易)继承DataPager并覆盖该行为。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-12 18:22:05

因此,还有另一种解决方案-更改DLL中的资源。

该解决方案基于this article

因为System.Controls.Data.dll是由MS签名的,所以我需要删除签名(强名称)。我使用AdmiralDebilitate删除了它。

  1. 将System.Controls.Data.dll复制到临时文件夹。
  2. 使用AdmiralDebilitate打开dll,单击“全部标记”,然后应用更改。这将删除阻止使用自定义资源修补的dll的强名称。
  3. 通过以下命令打开临时dll中的Visual Studio命令提示符

ildasm System.Controls.Data.dll

  • Use System.Windows.Controls.DataPager.PagerResources.resources.

  • Edit /out=System.Controls.Data.il任何资源编辑器(我使用Resource.net)打开ildasm你想要的资源字符串。通过命令保存资源文件并关闭editor.

  • Reassemble程序集

System.Controls.Data.il

  • Done.

/resource=System.Controls.Data.res /dll /output=System.Controls.Data.dll ilasm

有两个可能的问题:

  • 您必须确保VS使用这个DLL,而不是来自GAC的原始DLL。这可以通过在记事本中打开.csproj文件并检查引用路径来确保。
  • 如果您使用依赖于修补的MS程序集的任何其他MS程序集,您也需要对它们进行修补(AdmiralDebilitate应该会有所帮助)。
票数 0
EN

Stack Overflow用户

发布于 2010-04-23 21:42:30

这很简单。查看我如何将DataPager本地化为葡萄牙语:

代码语言:javascript
复制
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);
        }
    }
}

}

票数 4
EN

Stack Overflow用户

发布于 2010-02-18 00:34:46

到目前为止,我找到的唯一解决方案是编辑DataPager的模板,删除负责显示“页面”和"of X“的两个文本框并创建新的文本框。然后,继承DataPager,覆盖OnApplyTemplate以附加到新的TextBoxes。

最后一部分是最棘手的-你必须处理你的数据源的适当事件(这取决于数据源),并更新你的新文本框的文本。

虽然这个解决方案应该是可行的,但它并不是很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2281958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档