【问题标题】:Localized input gesture text in WPFWPF 中的本地化输入手势文本
【发布时间】:2018-07-29 03:39:57
【问题描述】:

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

结果如下:

这是 xaml 代码:

<ContextMenu>
    <MenuItem Header="Edit" Command="local:MyWindow.MyCommand"/>
    <MenuItem Header="Save" Command="Save"/>
</ContextMenu>

这是为什么?如何本地化自己的命令(最好不要对翻译的修饰符进行硬编码)?

【问题讨论】:

  • 有趣。你是如何提供这些手势的?注册命令时的默认值?
  • @Mike,显示的文字是默认的,我只指定了key。自定义命令的按键手势如下所示:ˋMyCommand.InputGestures.Add(new KeyGesture(Key.E, ModifierKeys.Control));ˋ

标签: c# wpf


【解决方案1】:

最后结束这个问题:

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

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

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

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);
}

现在,可以将上面的示例更改为所需的行为:

MyCommand.InputGestures.Add(CreateGesture(Key.E, ModifierKeys.Control));

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    相关资源
    最近更新 更多