首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF中的本地化输入手势文本

WPF中的本地化输入手势文本
EN

Stack Overflow用户
提问于 2018-02-18 22:04:39
回答 1查看 609关注 0票数 0

我有一个定制的RoutedCommand,带有一个输入键手势,这个手势在本地化应用程序的菜单项中调用。我发现,显示为我自己的命令的键盘快捷方式的文本没有本地化为德语(显示为“Ctrl+.”),而内置的ApplicationCommands键修饰符被翻译成德语(显示为“Strg+.”)。

结果如下:

这是xaml代码:

代码语言:javascript
复制
<ContextMenu>
    <MenuItem Header="Edit" Command="local:MyWindow.MyCommand"/>
    <MenuItem Header="Save" Command="Save"/>
</ContextMenu>

为什么会这样呢?我如何本地化自己的命令(最好不用硬编码已翻译的修饰符)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-25 15:15:59

最后结束这个问题:

正如看起来的那样,内置命令使用一些内部查找来获取本地化字符串作为输入手势。例如,ApplicationCommands的方法如下所示:

https://referencesource.microsoft.com/#PresentationCore/Core/CSharp/System/Windows/Input/Command/ApplicationCommands.cs,343

我发现不需要为所有输入手势手动添加资源的唯一方法是将WPF键转换为WinForms键并在其中创建一个显示字符串:

代码语言:javascript
复制
static Keys ToWinFormsKeys(Key key, ModifierKeys modifiers)
{
    Keys keys = (Keys)KeyInterop.VirtualKeyFromKey(key);
    if ((modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
        keys |= Keys.Alt;
    if ((modifiers & ModifierKeys.Control) == ModifierKeys.Control)
        keys |= Keys.Control;
    if ((modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
        keys |= Keys.Shift;
    return keys;
}

static KeyGesture CreateGesture(Key key, ModifierKeys modifiers)
{
    Keys formsKeys = ToWinFormsKeys(key, modifiers);
    string display = wFormsKeyConv.ConvertToString(formsKeys);
    return new KeyGesture(key, modifiers, display);
}

现在,对于所需的行为,可以将上面的示例更改为以下内容:

代码语言:javascript
复制
MyCommand.InputGestures.Add(CreateGesture(Key.E, ModifierKeys.Control));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48857096

复制
相关文章

相似问题

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