gpt4 book ai didi

c# - 如何正确处理快捷键和键盘事件?

转载 作者:行者123 更新时间:2023-11-30 12:14:55 27 4
gpt4 key购买 nike

捷径有问题,如有任何帮助/提示,​​我们将不胜感激!目标:我需要能够在我的应用程序中使用和不使用修饰符来处理快捷键。因此,例如我需要处理键“a”以及“CTR+a”。但我只想在没有控件处理这些键的情况下处理它们。例如,TextBox 类使用大部分键,包括一些命令,如“Ctrl+C”等,所以我不想在 TextBox 处理这些事件时拦截它们。

我尝试使用命令以及将事件附加到 KeyUp 到窗口,但是,命令在 TextBox 有机会查看它们之前拦截键,KeyDown 冒泡到窗口级别,即使 TextBox 使用了键!我怎样才能让我的窗口获得任何子控件都没有处理的键?请查看下面对我不起作用的代码。此外,由于我有许多不同的控件,我宁愿有一个“适当的”解决方案:我宁愿不将处理程序附加到我窗口中的每个控件实例。

<Window x:Class="KeyTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">

<Window.CommandBindings>
<CommandBinding Command="Help"
CanExecute="HelpCanExecute"
Executed="HelpExecuted" />
</Window.CommandBindings>

<Window.InputBindings>
<KeyBinding Command="Help" Key="H" />
</Window.InputBindings>

<Grid>
<WrapPanel>
<TextBox Name="myLOG" Width="300" Height="200" Background="LightBlue" />
<TextBox Name="myINPUT" Width="300" Height="200" />
<Button Content="JUST FOR FUN" />
</WrapPanel>
</Grid>

对于 C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace KeyTest
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private void HelpCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
myLOG.Text += "HELP CAN EXECUTE\n";
e.CanExecute = true;
e.Handled = true;
}

private void HelpExecuted(object sender, ExecutedRoutedEventArgs e)
{
myLOG.Text += "HELP EXECUTED!!!\n";
e.Handled = true;
}

public void myKeyUpHandler(Object sender, KeyEventArgs args)
{
myLOG.Text += "KEY UP EVENT! " + args.Key + "\n";
}

public MainWindow()
{
InitializeComponent();
this.KeyUp += new KeyEventHandler(myKeyUpHandler);
}
}
}

当焦点位于文本框中时,按“h”会触发命令,即使我希望“h”仅转到文本框。此外,当在文本框内时,按任何字母数字键都会触发 KeyUp 事件,尽管据我所知,文本框应该 handled=true 该事件!

感谢您的帮助!

最佳答案

您需要使用预览事件类型进行调查。它们发生在其他控件处理事件之前。然后你想停止事件冒泡。我相信您使用 e.Handled 正确地做到了这一点。

调查这个:http://msdn.microsoft.com/en-us/library/system.windows.input.keyboard.previewkeydown.aspx

不确定如何在 xaml 中为您想做的事情做这件事。表达式混合库对于从事件中生成命令非常有帮助。看这里:http://jacokarsten.wordpress.com/2009/03/27/applying-command-binding-to-any-control-and-any-event/

关于c# - 如何正确处理快捷键和键盘事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com