Andreas Grech Andreas Grech - 3 years ago 266
C# Question

WPF: A TextBox that has an event that fires when the Enter Key is pressed

Instead of attaching a

event with each
in my app and checking if the pressed key was an Enter key and then do an action, I decided to implement extended version of a
that includes a DefaultAction event that fires when an Enter Key is pressed in a

What I did was basically create a new Class that extends from
with a public event
, like such:

public class DefaultTextBoxControl:TextBox
public event EventHandler<EventArgs> DefaultAction = delegate { };

public DefaultTextBoxControl()
PreviewKeyUp += DefaultTextBoxControl_PreviewKeyUp;

void DefaultTextBoxControl_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
if (e.Key != Key.Enter)
DefaultAction(this, EventArgs.Empty);

I then use this custom textbox from my app like such (xaml):

<Controls:DefaultTextBoxControl DefaultAction="DefaultTextBoxControl_DefaultAction">

Now in my little experience I've had in learning WPF I've realized that almost most of the time there is a "cooler" (and hopefully easier) way to implement things my question is, How can I improve the above control? Or maybe is there another way I can do the above control? ...maybe using only declarative code instead of both declarative (xaml) and procedural (C#) ?

Answer Source

Have a look at this blog post from a few months back where I attach a 'global' event handler to TextBox.GotFocus to select the text.

Essentially you can handle the KeyUp event in your App class, like this:

protected override void OnStartup(StartupEventArgs e)
        new System.Windows.Input.KeyEventHandler(TextBox_KeyUp));


private void TextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
    if (e.Key != System.Windows.Input.Key.Enter) return;

    // your event handler here
    e.Handled = true;
    MessageBox.Show("Enter pressed");

... and now every TextBox in your application will call the TextBox_KeyUp method as users type into them.


As you've pointed out in your comment, this is only useful if every TextBox needs to execute the same code.

To add an arbitrary event like an Enter keypress, you might be better off looking into Attached Events. I believe this can get you what you want.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download