我在玩.NET 4.0 WPF功能區,並正在尋找一種方法來本地化功能區上下文菜單字符串。默認情況下,右鍵單擊功能區將顯示「最小化功能區」等項目。我想將這些字符串本地化,例如顯示「Multifunktionsleiste verbergen」。WPF:本地化WPF功能區QAT上下文菜單文本
我該怎麼做?這可能嗎?
我在玩.NET 4.0 WPF功能區,並正在尋找一種方法來本地化功能區上下文菜單字符串。默認情況下,右鍵單擊功能區將顯示「最小化功能區」等項目。我想將這些字符串本地化,例如顯示「Multifunktionsleiste verbergen」。WPF:本地化WPF功能區QAT上下文菜單文本
我該怎麼做?這可能嗎?
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");
我不知道,但沒有從源recompling庫不能是可能的,如果你改變(如果我不糾正,將是巨大的,在這裏從別人)的色帶庫定義ResourcesManager
new ResourceManager("ExceptionStringTable", typeof(SR).Assembly);
源文件存儲在名爲ExceptionStringTable.txt的資源文件中。
字符串標識符是:
來源可以從here下載。在RibbonControlsLibrary \ Resources \中,可以找到Ribbon的資源實現。
另一種方法是通過反射來替換值:
FieldInfo pi = typeof(Microsoft.Windows.Controls.Ribbon.RibbonContextMenu).GetField("AddToQATText", (BindingFlags.NonPublic | BindingFlags.Static));
pi.SetValue(null, "Localized text");
此代碼已到帶控制(通常是主窗口的InitializeComponent)
我想基於前面所討論提出另一種解決方案:
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
應該返回下面列出的所有字符串:
嗯,這是一個恥辱真的,但它似乎是唯一的出路。 – 2011-06-15 13:02:39
對不起,馬克的回覆實際上效果更好,沒有重新編譯庫... – 2012-02-15 13:22:31