LORD Asked:2020-05-13 20:58:21 +0000 UTC2020-05-13 20:58:21 +0000 UTC 2020-05-13 20:58:21 +0000 UTC 如何进行按钮绑定 - 在 WPF C# 中输入按钮 772 我想这样做,以便当按下键盘上的按钮时,WPF 中的按钮可以工作。这似乎可以使用 Label 控件来完成。 c# 2 个回答 Voted Best Answer EvgeniyZ 2020-05-13T22:11:26Z2020-05-13T22:11:26Z 对于 WPF 中的 Enter 和 Esc 键,按钮本身有辅助设置。 IsDefault = "true" 通过将此值设置为 true,按钮将响应按Enter键。 IsCancel = "true" 通过将此值设置为 true,按钮将响应按下Esc 键。 然而! 在 WPF 中,习惯使用 MVVM 模式,但在其中不习惯在按钮上使用 Click 事件或类似的东西,习惯上在那里使用命令。让我们尝试实现几个绑定到给定键的命令。 首先我们需要一个助手类(我将从本课中学习)。 public class RelayCommand : ICommand { private Action<object> execute; private Func<object, bool> canExecute; public event EventHandler CanExecuteChanged { add => CommandManager.RequerySuggested += value; remove => CommandManager.RequerySuggested -= value; } public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null) { this.execute = execute; this.canExecute = canExecute; } public bool CanExecute(object parameter) { return canExecute == null || canExecute(parameter); } public void Execute(object parameter) { execute(parameter); } } 然后我们将创建一个 ViewModel,在其中我们实现几个命令: public class MainViewModel { public MainViewModel() { HelloCommand = new RelayCommand(_ => Hello()); GoodbyeCommand = new RelayCommand(_ => Goodbye()); } public ICommand HelloCommand { get; } public ICommand GoodbyeCommand { get; } private void Hello() { Console.WriteLine("Привет мир!"); } private void Goodbye() { Console.WriteLine("Мир, пока!"); } } 在我们的按钮设置 DataContext 的窗口中: private MainViewModel MainViewModel { get; set; } public MainWindow() { InitializeComponent(); MainViewModel = new MainViewModel(); DataContext = MainViewModel; } 与 XAML 一起工作还有一点点。这里我会亲自使用 InputBindings 将命令直接设置到窗口中: <Window.InputBindings> <KeyBinding Command="{Binding HelloCommand}" Key="F1"/> <KeyBinding Command="{Binding GoodbyeCommand}" Key="F2"/> </Window.InputBindings> 就这样。我们运行它,看到当你按下 F1 时,Debug 窗口写着“Hello world!”,当你按下 F2 时,你会看到题词“World, bye!”。 有了命令,我们可以安全地将其附加到按钮上: <Button Command="{Binding HelloCommand}"/> Avdotiy Fedorov 2020-05-13T21:59:32Z2020-05-13T21:59:32Z 除了上面注释中指出的方法之外,您还可以处理用户控件上的 keydown 事件。在 backcode 中,它看起来像 KeyDown+=(sender,args) => { if (args.Key == Key.Enter) //вызов нужного метода 您还可以使用 keyBindings。它们在窗口或 UserControl 的 InputBindings 集合中指定,如下所示: <Window.InputBindings> <KeyBinding Key="S" Command="{Binding SaveAsCommand}"/> <KeyBinding Key="S" Modifiers="Control+Shift" Command="{Binding SaveAsCommand}"> </Window.InputBindings> 此方法最常适用于使用 MVVM 时,当带有处理程序的相应命令写入窗口或 UserControl 的 DataContext 时。
对于 WPF 中的 Enter 和 Esc 键,按钮本身有辅助设置。
IsDefault = "true"通过将此值设置为 true,按钮将响应按Enter键。
IsCancel = "true"通过将此值设置为 true,按钮将响应按下Esc 键。
然而!
在 WPF 中,习惯使用 MVVM 模式,但在其中不习惯在按钮上使用 Click 事件或类似的东西,习惯上在那里使用命令。让我们尝试实现几个绑定到给定键的命令。
首先我们需要一个助手类(我将从本课中学习)。
然后我们将创建一个 ViewModel,在其中我们实现几个命令:
在我们的按钮设置 DataContext 的窗口中:
与 XAML 一起工作还有一点点。这里我会亲自使用 InputBindings 将命令直接设置到窗口中:
就这样。我们运行它,看到当你按下 F1 时,Debug 窗口写着“Hello world!”,当你按下 F2 时,你会看到题词“World, bye!”。
有了命令,我们可以安全地将其附加到按钮上:
除了上面注释中指出的方法之外,您还可以处理用户控件上的 keydown 事件。在 backcode 中,它看起来像
您还可以使用 keyBindings。它们在窗口或 UserControl 的 InputBindings 集合中指定,如下所示:
此方法最常适用于使用 MVVM 时,当带有处理程序的相应命令写入窗口或 UserControl 的 DataContext 时。