[WPF] KeyBinding 사용하여 단축키 설정하기

WPF에서 KeyBinding을 사용하여 Alt+D 키 조합 같은 단축키를 처리하려면 Window.InputBindings에서 KeyBinding을 설정하고 이를 명령에 바인딩할 수 있습니다. 방법은 다음과 같습니다.

MainWindow.xaml

1
2
3
4
5
6
7
8
9
10
11
<Window x:Class="WpfApp.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.InputBindings>
<KeyBinding Key="D" Modifiers="Alt" Command="{Binding AltDCommand}" />
</Window.InputBindings>
<Grid>
<TextBlock x:Name="OutputTextBlock" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
</Grid>
</Window>

MainWindow.xaml.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Windows;
using System.Windows.Input;

namespace WpfApp
{
public partial class MainWindow : Window
{
public ICommand AltDCommand { get; }

public MainWindow()
{
InitializeComponent();
AltDCommand = new RelayCommand(ExecuteAltD);
DataContext = this;
}

private void ExecuteAltD(object parameter)
{
OutputTextBlock.Text = "Alt+D was pressed!";
}
}

public class RelayCommand : ICommand
{
private readonly Action<object> execute;
private readonly Predicate<object> canExecute;

public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)
{
this.execute = execute ?? throw new ArgumentNullException(nameof(execute));
this.canExecute = canExecute;
}

public bool CanExecute(object parameter) => canExecute == null || canExecute(parameter);

public void Execute(object parameter) => execute(parameter);

public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
}
}

설명

1. MainWindow.xaml

  • Alt+D에 대한 KeyBinding을 정의하고 이를 AltDCommand에 바인딩합니다.
  • Alt+D를 누를 때 메시지를 표시하기 위해 OutputTextBlock이라는 TextBlock을 포함합니다.

2. MainWindow.xaml.cs

  • RelayCommand를 사용하여 AltDCommand를 정의합니다.
  • ExecuteAltD 메서드는 Alt+D를 누르면 TextBlock 텍스트를 업데이트합니다.
  • 'DataContext’를 현재 인스턴스로 설정하여 바인딩을 활성화합니다.

3. RelayCommand

  • 명령 논리를 처리하기 위해 'ICommand’를 구현합니다.
  • RelayCommand 클래스는 Action<object>를 사용하여 실행하고 선택적 Predicate<object>를 사용하여 명령을 실행할 수 있는지 확인합니다.

결론

이 접근 방식은 WPF의 ‘KeyBinding’ 및 ‘Command’ 인프라를 활용하여 ‘Alt+D’ 키 조합을 처리하고 키 누름에 응답하는 깔끔하고 선언적인 방법을 제공합니다.

Share