13

I am trying to make a hot key (ie Ctrl + Y) that will change the focus to a text box.

I am a transplant from Delphi, and this is confusing me. In Delphi 5 this was so, so easy. (On the caption of the label you could just add an & before the letter you want to make the hot key. After you point the label at the TextBox the hotkey would work.)

For WPF, I am seeing horrific examples in WPF involving calling out to Win32 calls or making a command for each hotkey (and other such heavy implementations).

I find it hard to believe that an IDE and Languange version that was new in 1999 (Delphi 5) has a better system (than WPF) for something as simple as Hotkeys.

Surely I am missing something. If you know, please tell me what it is.

Vaccano
  • 78,325
  • 149
  • 468
  • 850
  • may be this thread is helpful to you http://stackoverflow.com/questions/1361350/keyboard-shortcuts-in-wpf – Habib May 04 '12 at 16:17
  • @Habib.OSU - It looks like you can use an _ instead of an &. But how do you connect the label to the TextBox? (And I tried putting an underscore in my label and it just printed the _). (The rest of the question seems to discuss using command for hot keys. I would like to avoid that if I can (I will have a lot of controls and wiring them all up with commands seems like overkill.)) – Vaccano May 04 '12 at 16:20
  • @Habib.OSU - I found the answer I was looking for. If you are interested you can see it posted below. – Vaccano May 04 '12 at 16:32

1 Answers1

24

So, I should have kept looking harder. I got it shortly after asking this question.

They way you do this is that you create a label and set its Content (something like this Content="_Years Of Service")

You then bind the Label's Target to a text box. (Target="{Binding ElementName=SomeTextBox}")

Now if you press Alt + Y it will move the focus to SomeTextBox.

Here is the full binding:

<Label Content="_Label" Target="{Binding ElementName=SomeTextBox}" />
<TextBox Name="SomeTextBox" />
Vaccano
  • 78,325
  • 149
  • 468
  • 850
  • 9
    Except that if you are assigning the string from the code, using `SomeLabel.Content = "_Label";`, the underline will be displayed as-is. The correct code is something like `SomeLabel.Content = new AccessText { Text = "_Label" };` – Roman Starkov Aug 15 '12 at 14:59