在 WPF 中,当您制作这样的标签时:
<Label Content="_My Label"/>
然后,当您运行应用程序并按下Alt键时,它将显示带下划线的“M”。
我们有自己的自定义热键附加属性,允许我们Ctrl使用Alt.
问题是只会Alt显示下划线。
有没有办法在Ctrl按下键时显示下划线?
注意:我不想在按下Alt时在后台发送编程 KeyPress 。Ctrl那只会混淆我的快捷方式系统。
行!我有一个解决方案可以在不按下但按下_
的情况下显示热键。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);
}
追加和删除代码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);
}
}
XAML 代码Button Bt1
:
<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再次按下才能使代码正常工作!
添加和删除 a 的最佳方法HotKeyChar
:
List<KeyValuePair<int, Control>>
来存储Index
的HotKeyChar
和Control
。KeyDown
事件中只需循环KeyValuePair<...>
..List<...>
附加_
.KeyUp
下,只需遍历..removing 中KeyValuePair<...>
的.List<...>
_
希望对您有所帮助!