有没有办法让没有Alt键的热键显示_?

Vac*_*ano 7 .net c# wpf hotkeys

在WPF中,当你制作这样的标签时:

<Label Content="_My Label"/>
Run Code Online (Sandbox Code Playgroud)

然后,当您运行应用程序并按下该Alt键时,它将显示带有下划线的"M".

我们有自己的自定义热键附加属性,允许我们使用Ctrl以及Alt.

问题是只会Alt显示下划线.

有没有办法在Ctrl按下键时显示下划线?

注意:我不想AltCtrl按下时在后台发送程序化的KeyPress .这只会混淆我的快捷方式系统.

Wri*_*ick 1

好的!我有一个解决方案来显示不按下但按下的_热键。AltCtrl

以下是具体操作方法:


动态按下键盘按键的小代码:

//<summary>
//Function to Perform a Keyboard KeyPress.
//</summary>
void PressKey(Key KeyboardKey)
{
    KeyEventArgs args = new KeyEventArgs(Keyboard.PrimaryDevice,
    Keyboard.PrimaryDevice.ActiveSource, 0, Key.LeftAlt);
    args.RoutedEvent = Keyboard.KeyDownEvent;
    InputManager.Current.ProcessInput(args);
}
Run Code Online (Sandbox Code Playgroud)

要追加和删除的代码HotKeyChar

//<summary>
//Function to Append a HotKeyChar to a Content of a Control.
//</summary>
void AppendHotKeyChar(ContentControl Ctrl, int KeyIndex)
{
    if (Ctrl.Content.ToString().Substring(KeyIndex, 1) != "_")
    {
        Ctrl.Content = "_" + Ctrl.Content;
    }
}
//<summary>
//Function to Remove a HotKeyChar to a Content of a Control.
//</summary>
void RemoveHotKeyChar(ContentControl Ctrl, int KeyIndex)
{
    if (Ctrl.Content.ToString().Substring(KeyIndex, 1) == "_")
    {
        Ctrl.Content = Ctrl.Content.ToString().Remove(KeyIndex, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML 代码Button Bt1

<Button x:Name="Bt1" Content="Button" HorizontalAlignment="Left" Margin="169,97,0,0" VerticalAlignment="Top" Width="75"/>
Run Code Online (Sandbox Code Playgroud)

(eg )Window.Loaded事件的代码:MainWindowMainWindow1_Loaded

PressKey(Key.LeftAlt);
Run Code Online (Sandbox Code Playgroud)

(eg )Window.KeyDown事件的代码:MainWindowMainWindow1_KeyDown

if (e.Key == Key.LeftCtrl)
{
    AppendHotKey(Bt1, 0);
}
Run Code Online (Sandbox Code Playgroud)

(eg )Window.KeyUp事件的代码:MainWindowMainWindow1_KeyUp

if (e.Key == Key.LeftCtrl)
{
    RemoveHotKey(Bt1, 0);
}
Run Code Online (Sandbox Code Playgroud)

现在,当您启动应用程序时,Alt将动态按下一次。

现在,每次您按 时Ctrl,您的Control.Content意愿都会附加一个_,因此HotKey会出现下划线!但需要注意的是,您应该在Control.Content没有添加内容的情况下创建HotKeyChar '_',但应保留添加内容Index的位置。_

但请记住,如果Alt在您的应用程序中再次按下,该代码将不再起作用。因此,您必须Alt再次按下才能使代码生效!

附加和删除的最佳方法HotKeyChar

  • 创建 的实例来List<KeyValuePair<int, Control>>存储IndexHotKeyCharControl
  • 现在,在KeyDown事件中只需循环遍历..appendingKeyValuePair<...>中的。List<...>_
  • 如果KeyUp再次发生,只需循环KeyValuePair<...>遍历List<...>..removing _

希望有帮助!