General Question About WPF Control Behavior and using Invoke

Posted by Phil Sandler on Stack Overflow See other posts from Stack Overflow or by Phil Sandler
Published on 2010-05-07T14:26:08Z Indexed on 2010/05/07 14:28 UTC
Read the original article Hit count: 477

Filed under:
|

I have been putting off activity on SO because my current reputation is "1337". :)

This is a question of "why" and not "how". By default, it seems that WPF does not set focus to the first control in a window when it's opening. In addition, when a textbox gets focus, by default it does not have it's existing text selected. So basically when I open a window, I want focus on the first control of the window, and if that control is a textbox, I want it's existing text (if any) to be selected.

I found some tips online to accomplish each of these behaviors, and combined them. The code below, which I placed in the constructor of my window, is what I came up with:

Loaded += (sender, e) =>
          {
              MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
              var textBox = FocusManager.GetFocusedElement(this) as TextBox;
              if (textBox != null)
              {
                  Action select = textBox.SelectAll;
                  //for some reason this doesn't work without using invoke.
                  Dispatcher.Invoke(DispatcherPriority.Loaded, select);
              }
          };

So, my question. Why does the above not work without using Dispatcher.Invoke? Is something built into the behavior of the window (or textbox) cause the selected text to be de-selected post-loading?

Maybe related, maybe not--another example of where I had to use Dispatcher.Invoke to control the behavior of a form:

http://stackoverflow.com/questions/2602979/wpf-focus-in-tab-control-content-when-new-tab-is-created

© Stack Overflow or respective owner

Related posts about wpf

Related posts about wpf-controls