У меня есть пользовательский элемент управления, вложенный в окно, которое действует как оболочка для отображения диалогового окна. Я игнорирую фокус в окне оболочки, а в размещенном пользовательском элементе управления я использую 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();
Тем не менее, мне бы понравился декларативный подход для простой и распространенной рутинной работы ...