Vac*_*ano 7 .net c# wpf hotkeys
在WPF中,当你制作这样的标签时:
<Label Content="_My Label"/>
Run Code Online (Sandbox Code Playgroud)
然后,当您运行应用程序并按下该Alt键时,它将显示带有下划线的"M".
我们有自己的自定义热键附加属性,允许我们使用Ctrl以及Alt.
问题是只会Alt显示下划线.
有没有办法在Ctrl按下键时显示下划线?
注意:我不想Alt在Ctrl按下时在后台发送程序化的KeyPress .这只会混淆我的快捷方式系统.
好的!我有一个解决方案来显示不按下但按下的_热键。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>>存储Index的HotKeyChar和Control。KeyDown事件中只需循环遍历..appendingKeyValuePair<...>中的。List<...>_KeyUp再次发生,只需循环KeyValuePair<...>遍历List<...>..removing _。希望有帮助!