Начальный фокус и поведение «Выбрать все»

У меня есть пользовательский элемент управления, вложенный в окно, которое действует как оболочка для отображения диалогового окна. Я игнорирую фокус в окне оболочки, а в размещенном пользовательском элементе управления я использую FocusManager для установки начального фокуса на именованный элемент (текстовое поле), как показано ниже.

Это работает, устанавливая курсор в начало названного текстового поля; однако я хочу, чтобы был выделен весь текст.

Класс TextBoxSelectionBehavior (ниже) обычно делает именно это, но не в этом случае. Есть ли простое исправление xaml, чтобы текст в названном текстовом поле был выбран при начальном фокусе?

Ура,
Беррил

Поведение при выборе текстового поля

// in app startup
TextBoxSelectionBehavior.RegisterTextboxSelectionBehavior();

/// <summary>
/// Helper to select all text in the text box on entry
/// </summary>
public static class TextBoxSelectionBehavior
{
    public static void RegisterTextboxSelectionBehavior()
    {
        EventManager.RegisterClassHandler(typeof(TextBox), UIElement.GotFocusEvent, new RoutedEventHandler(OnTextBox_GotFocus));
    }

    private static void OnTextBox_GotFocus(object sender, RoutedEventArgs e)
    {
        var tb = (sender as TextBox);
        if (tb != null)
            tb.SelectAll();
    }
}

Размещенный пользовательский элемент управления

<UserControl   
<DockPanel KeyboardNavigation.TabNavigation="Local" 
    FocusManager.FocusedElement="{Binding ElementName=tbLastName}" >

            <TextBox x:Name="tbLastName" ... />

пробел решение

Согласно комментариям с Рэйчел ниже, я отказался от FocusManger в пользу некоторого кода:

tbLastName.Loaded += (sender, e) => tbLastName.Focus();

Тем не менее, мне бы понравился декларативный подход для простой и распространенной рутинной работы ...

6
задан Berryl 19 October 2011 в 16:08
поделиться