2011-02-16 84 views
1

我在玩.NET 4.0 WPF功能區,並正在尋找一種方法來本地化功能區上下文菜單字符串。默認情況下,右鍵單擊功能區將顯示「最小化功能區」等項目。我想將這些字符串本地化,例如顯示「Multifunktionsleiste verbergen」。WPF:本地化WPF功能區QAT上下文菜單文本

我該怎麼做?這可能嗎?

回答

1

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

我不知道,但沒有從源recompling庫不能是可能的,如果你改變(如果我不糾正,將是巨大的,在這裏從別人)的色帶庫定義ResourcesManager

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

源文件存儲在名爲ExceptionStringTable.txt的資源文件中。

字符串標識符是:

  • RibbonContextMenu_ShowQATAbove
  • RibbonContextMenu_ShowQATBelow
  • RibbonContextMenu_MaximizeTheRibbon
  • RibbonContextMenu_MinimizeTheRibbon
  • 圖書館

來源可以從here下載。在RibbonControlsLibrary \ Resources \中,可以找到Ribbon的資源實現。

+0

嗯,這是一個恥辱真的,但它似乎是唯一的出路。 – 2011-06-15 13:02:39

+0

對不起,馬克的回覆實際上效果更好,沒有重新編譯庫... – 2012-02-15 13:22:31

1

另一種方法是通過反射來替換值:

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

此代碼已到帶控制(通常是主窗口的InitializeComponent)

0

我想基於前面所討論提出另一種解決方案:

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是具有重寫的GetString方法的基本ResourceManager的繼承者。而RibbonResourceManager應該返回下面列出的所有字符串:

  • 「RibbonQuickAccessToolBar_OverflowButtonToolTip」
  • 「QATKeyTipCharacters」
  • 「RibbonContextMenu_AddToQAT」
  • 「RibbonContextMenu_AddGalleryToQAT」
  • 「RibbonContextMenu_RemoveFromQAT」
  • 「RibbonContextMenu_ShowQATAbove」
  • 「RibbonContextMenu_ShowQATBelow」
  • 「RibbonContextMenu_MaximizeTheRibbon」
  • 「RibbonContextMenu_MinimizeTheRibbon」