在WPF中制作如下标签:
<Label Content="_My Label"/>
然后当您运行应用程序并按 Alt 键时,它将显示带有下划线的“M”。
我们有自己的自定义热键附加属性,允许我们使用 Ctrl 以及 Alt 。
问题是只有 Alt 会显示下划线。
当按下 Ctrl 键时,有没有办法显示下划线?
注意:当按下 Ctrl 时,我不想在后台发送程序化的 Alt KeyPress。这只会混淆我的快捷方式系统。
答案 0 :(得分: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"/>
Window.Loaded
MainWindow
事件的代码(例如MainWindow1_Loaded
):
PressKey(Key.LeftAlt);
Window.KeyDown
MainWindow
事件的代码(例如MainWindow1_KeyDown
):
if (e.Key == Key.LeftCtrl)
{
AppendHotKey(Bt1, 0);
}
Window.KeyUp
MainWindow
事件的代码(例如MainWindow1_KeyUp
):
if (e.Key == Key.LeftCtrl)
{
RemoveHotKey(Bt1, 0);
}
现在,当您启动应用程序时, Alt 将动态按下一次。
现在,每次按 Ctrl ,您的Control.Content
都会附加_
,因此HotKey
会显示下划线!
但有一点需要注意的是,您应该创建Control.Content
而不是HotKeyChar '_'
,但要保留Index
附加_
的位置。
但请记住,如果在您的应用中再次按 Alt ,代码将不再有效。因此,您必须再次按 Alt 才能使代码正常工作!
添加和删除HotKeyChar
的最佳方式:
List<KeyValuePair<int, Control>>
的实例,以存储Index
和HotKeyChar
的{{1}}。Control
活动中,只需循环KeyDown
中的KeyValuePair<...>
..附加List<...>
。_
事件中,循环浏览KeyUp
中的KeyValuePair<...>
..删除List<...>
。希望有所帮助!