Cuando abro la ventana MyWindow , quiero que el cursor de mi teclado apunte al cuadro de texto contenido en un control de usuario que está contenido en la ventana.
Por lo general, establecería FocusManager.FocusedElement={Binding ElementName=TextBoxToPutFocusOn} .
Pero aquí, mi restricción es que el cuadro de texto está dentro de un control de usuario que está dentro de mi ventana .
¿Cómo puede mi ventana establecer el foco en este cuadro de texto?
Para ilustrar, aquí están mis 2 archivos:
MiVentana.xaml
<Window xmlns:wpf="clr-namespace:MyWPFNamespace"> <StackPanel> <TextBlock>Sample text</TextBlock> <wpf:SpecialTextBox/> </StackPanel> </Window>SpecialTextBox.xaml
<UserControl x:Class="MyWPFNamespace.SpecialTextBox" x:Name="SpecialName"> <TextBox x:Name="TextBoxToPutFocusOn" /> </UserControl>Gracias
UserControl de WPF hereda FrameworkElement que tiene el método FrameworkElement.OnGotFocus . Así que puedes usarlo de la siguiente manera (en C#):
protected override void OnGotFocus(RoutedEventArgs e) { base.OnGotFocus(e); FocusManager.SetFocusedElement(Window.GetWindow(this), this.TextBoxToPutFocusOn); }Lo hice configurando la siguiente propiedad en el Control de usuario:
<UserControl x:Class="MyWPFNamespace.SpecialTextBox" x:Name="SpecialName" FocusManager.GotFocus="MyTextBox_OnGotFocus">'Y en el código detrás:
Private Sub TextBoxWithHint_OnGotFocus(sender As Object, e As RoutedEventArgs) MyTextBox.Focus() End SubFinalmente, en MainWindow.xaml :
<Window FocusManager.FocusedElement="{Binding SpecialName}">