【问题标题】:Is there a way to make the _ appear for hotkeys without the Alt key?有没有办法让 _ 出现在没有 Alt 键的热键上?
【发布时间】:2012-05-19 13:55:38
【问题描述】:

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

<Label Content="_My Label"/>

然后,当您运行应用程序并按 Alt 键时,它将显示带下划线的“M”。

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

问题是只有 Alt 会显示下划线。

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

注意:当按下 Ctrl 时,我不想在后台发送编程的 Alt KeyPress。那只会混淆我的快捷方式系统。

【问题讨论】:

  • 正如@Slaks 所说,这是 Windows 文件资源管理器部分的一个选项。
  • @SLaks - 可以选择让 Ctrl 键像 Alt 键一样打开它?我知道有一个选项可以让它一直打开。正如我的问题所述,我不知道有一个可以激活 Ctrl 键。你能指点我吗? (将其发布为答案,我会接受。)
  • 试试这个解决方法:stackoverflow.com/questions/8588004/…

标签: c# .net wpf hotkeys


【解决方案1】:

好的!我有一个解决方案可以在没有按下 Alt 但按下 Ctrl 的情况下为热键显示 _

这是怎么做的:


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

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

添加和删除 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);
    }
}

Button Bt1 的 XAML 代码:

<Button x:Name="Bt1" Content="Button" HorizontalAlignment="Left" Margin="169,97,0,0" VerticalAlignment="Top" Width="75"/>

MainWindowWindow.Loaded 事件代码(例如MainWindow1_Loaded):

PressKey(Key.LeftAlt);

MainWindowWindow.KeyDown 事件代码(例如MainWindow1_KeyDown):

if (e.Key == Key.LeftCtrl)
{
    AppendHotKey(Bt1, 0);
}

MainWindowWindow.KeyUp 事件代码(例如MainWindow1_KeyUp):

if (e.Key == Key.LeftCtrl)
{
    RemoveHotKey(Bt1, 0);
}

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

现在每次你按下 Ctrl,你的Control.Content 将被附加一个_,所以HotKey 将出现下划线! 但要注意的是,您应该在没有 HotKeyChar '_' 的情况下创建 Control.Content,但保留一个 Index 以在其中添加您的 _

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

附加和删除HotKeyChar 的最佳方法:

  • 创建List&lt;KeyValuePair&lt;int, Control&gt;&gt; 的实例以存储HotKeyCharControlIndex
  • 现在在KeyDown 事件中,只需循环遍历List&lt;...&gt; 中的KeyValuePair&lt;...&gt;..附加_
  • 再次在KeyUp 事件中循环遍历KeyValuePair&lt;...&gt; 中的List&lt;...&gt;..删除_

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 1970-01-01
    • 2019-08-14
    • 2022-12-28
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多