<Window x:Class="RoutedEvents.KeyPressEvents" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="KeyPressEvents" Height="400" Width="400" > <StackPanel> <DockPanel Margin="5"> <TextBlock Margin="3" >Type here:</TextBlock> <TextBox PreviewKeyDown="KeyEvent" KeyDown="KeyEvent" PreviewKeyUp="KeyEvent" KeyUp="KeyEvent" PreviewTextInput="TextInput" TextChanged="TextChanged"></TextBox> </DockPanel> <ListBox Margin="5" Name="lstMessages"></ListBox> <CheckBox Margin="5" Name="chkIgnoreRepeat">Ignore Repeated Keys</CheckBox> <Button Click="cmdClear_Click" HorizontalAlignment="Right">Clear List</Button> </StackPanel> </Window> //File:Window.xaml.cs using System; using System.Collections.Generic; 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.Shapes; namespace RoutedEvents { public partial class KeyPressEvents : System.Windows.Window { public KeyPressEvents() { InitializeComponent(); } private void KeyEvent(object sender, KeyEventArgs e) { if ((bool)chkIgnoreRepeat.IsChecked && e.IsRepeat) return; string message = "Event: " + e.RoutedEvent + " " + " Key: " + e.Key; lstMessages.Items.Add(message); } private void TextInput(object sender, TextCompositionEventArgs e) { string message = "Event: " + e.RoutedEvent + " " + " Text: " + e.Text; lstMessages.Items.Add(message); } private void TextChanged(object sender, TextChangedEventArgs e) { string message = "Event: " + e.RoutedEvent; lstMessages.Items.Add(message); } private void cmdClear_Click(object sender, RoutedEventArgs e) { lstMessages.Items.Clear(); } } }