TheDeveloperBlog.com


WPF KeyDown Event Handler

KeyDown. Applications sometimes need to access keyboard commands. This helps usability. With the KeyDown event handler, we can listen for key presses, like "function keys" like F5 for example.


Example. Let us begin with a new WPF program. Please add a KeyDown event handler to the Window element. Let Visual Studio create Window_KeyDown by pressing Enter. Then, add some code to the event handler.

KeyEventArgs: In the Window_KeyDown method, the KeyEventArgs is important. From it, we access the key that was pressed.

Key: This is the property that tells us what key was pressed. In this example, we test against the Key.F5 constant.

When the user presses F5, the window title will change to a special message. In many programs, like web browsers, F5 means "reload." It is usually best to follow conventions—users will appreciate this.

Based on:

.NET 4.5

Example markup: XAML

<Window x:Class="WpfApplication25.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"
	KeyDown="Window_KeyDown">
</Window>

Example code: C#

using System.Windows;
using System.Windows.Input;

namespace WpfApplication25
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
	public MainWindow()
	{
	    InitializeComponent();
	}

	private void Window_KeyDown(object sender, KeyEventArgs e)
	{
	    // ... Test for F5 key.
	    if (e.Key == Key.F5)
	    {
		this.Title = "You pressed F5";
	    }
	}
    }
}


KeyBinding. More complicated key presses are handled with "gestures" in WPF. We can specify commands with KeyBinding elements. On MenuItems, we can specify InputGestureText. With a simple KeyDown method, we cannot easily handle complex commands.

Menu

Summary. With KeyDown, we can implement simple keyboard commands in WPF programs. We used the Key property to test a KeyEventsArg object. Often the simplest solution is best. But for more complex requirements, like gestures, KeyBindings are needed.