WPF: локализуйте тексты контекстного меню WPF ленты QAT - PullRequest
1 голос
/ 16 февраля 2011

Я играю с лентой .NET 4.0 WPF и ищу способ локализовать строки контекстного меню ленты.По умолчанию при щелчке правой кнопкой мыши на ленте отображаются такие элементы, как «Свернуть ленту».Я хотел бы локализовать эти строки, например, для отображения «Multifunktionsleiste verbergen».

Как бы я это сделал?Возможно ли это вообще?

Ответы [ 4 ]

1 голос
/ 13 сентября 2011

Другой подход заключается в замене значений на отражение:

  FieldInfo pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("AddToQATText", (BindingFlags.NonPublic | BindingFlags.Static));
  pi.SetValue(null, "Localized text");

Этот код должен быть выполнен перед первым использованием элемента управления ленты (обычно InitializeComponent главного окна)

1 голос
/ 27 сентября 2011

A (надеюсь) полное расширение для решения userxyz:

        FieldInfo pi;

        pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("AddToQATText", (BindingFlags.NonPublic | BindingFlags.Static));
        pi.SetValue(null, "RibbonContext_AddToQATText");
        pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("RemoveFromQATText", (BindingFlags.NonPublic | BindingFlags.Static));
        pi.SetValue(null, "RibbonContext_RemoveFromQATText");
        pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("ShowQATAboveText", (BindingFlags.NonPublic | BindingFlags.Static));
        pi.SetValue(null, "RibbonContext_ShowQATAboveText");
        pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("ShowQATBelowText", (BindingFlags.NonPublic | BindingFlags.Static));
        pi.SetValue(null, "RibbonContext_ShowQATBelowText");
        pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("MaximizeTheRibbonText", (BindingFlags.NonPublic | BindingFlags.Static));
        pi.SetValue(null, "RibbonContext_MaximizeTheRibbonText");
        pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("MinimizeTheRibbonText", (BindingFlags.NonPublic | BindingFlags.Static));
        pi.SetValue(null, "RibbonContext_MinimizeTheRibbonText");
1 голос
/ 16 февраля 2011

Я не уверен, но это невозможно без перекомпиляции библиотеки из источников (если я не прав, было бы неплохо приехать сюда от кого-то), поскольку библиотека ленты определяет ResourcesManager

new ResourceManager("ExceptionStringTable", typeof(SR).Assembly);

Если вы меняете источник, эти тексты сохраняются в файле ресурсов с именем ExceptionStringTable.txt.

Идентификаторы для строк:

  • RibbonContextMenu_ShowQATAbove
  • RibbonContextMenu_ShowQATBelow
  • RibbonContextMenu_MaximizeTheRibbon
  • RibbonContextMenu_MinimizeTheRibbon

Исходники для библиотеки можно скачать с здесь . В RibbonControlsLibrary \ Resources \ вы можете найти реализацию ресурсов для ленты.

0 голосов
/ 16 октября 2013

Я хотел бы предложить другое решение на основе ранее обсужденного:

var ribbonResourceManager = new RibbonResourceManager();

var translatorType = typeof(RibbonContextMenu)
    .Assembly.GetType("Microsoft.Windows.Controls.SR");
var resourceManagerField = translatorType.GetField("_resourceManager", 
    BindingFlags.NonPublic | BindingFlags.Static);
resourceManagerField.SetValue(null, ribbonResourceManager);

, где RibbonReourceManager - наследник базового ResourceManager с переопределенными методами GetString.И RibbonResourceManager должен возвращать все строки, перечисленные ниже:

  • "RibbonQuickAccessToolBar_OverflowButtonToolTip"
  • "QATKeyTipCharacters"
  • "RibbonContextMenu_AddToTATQuT"
  • "RibbonContextMenu_RemoveFromQAT"
  • "RibbonContextMenu_ShowQATAbove"
  • "RibbonContextMenu_ShowQATBelow" *
  • * RibbonContextMenB * 10 * Mibu_Mib_MB*
...