tags:

views:

34

answers:

1

Hello,

I am trying to remap the input of a textbox. For example. If a user enters a N then I would like to change it to a 9. I thought it might be best to try and catch it in the PreviewKeyDown event although I will also need to process paste attempts (I can solve that bit I think).

Is PreviewKeyDown a good place to start? If so, how do I send the replacement key. I know that e.Handled = true will stop the original key being processed.

Thanks.

A: 

I would subclass the textbox and add the desired behavior. (An attached behavior is another option, but I like the derived class better.)

public class MyTextBox : TextBox
{
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.N)
        {
            e.Handled = true;
            Text += '9';

            // Setting Text annoyingly puts SelectionStart at 0
            this.SelectionStart = Text.Length;
        }
        else
        {
            base.OnPreviewKeyDown(e);
        }
    }
}
Scott J