Sé que esto es viejo, pero me encontré con este problema hoy en día y al final ocurrió con esta resolución:
Desde el TextBox
solamente se carga cuando se selecciona un elemento, y que es cuando se quiere enfoque para establecerse, simplemente puede manejar el evento TextBox.Load
y llamar al Focus()
.
Hay dos formas de lograr esto.
1. Reemplace el TextBox
en el DataTemplate
con un AutoFocusTextBox
.
public class AutoFocusTextBox : TextBox
{
public AutoFocusTextBox()
{
Loaded += delegate { Focus(); };
}
}
No se olvide que necesitará para hacer referencia al espacio de nombres en el que AutoFocusTextBox se define en el archivo de .xaml.
2. Agregue un controlador en el código detrás del archivo donde se define DataTemplate
.
SomeResourceDictionary.xaml
<TextBox Text="{Binding Something, Mode=TwoWay}" Style={StaticResource ...
Loaded="FocusTextBoxOnLoad" />
SomeResourceDictionary.xaml.cs
private void FocusTextBoxOnLoad(object sender, RoutedEventArgs e)
{
var textbox = sender as TextBox;
if(textbox == null) return;
textbox.Focus();
}
Con cualquiera de las opciones, siempre se puede añadir otro comportamiento en el controlador, tales como seleccionar todo el texto .
FindResource devuelve un objeto, así que asegúrese de convertirlo a FrameworkTemplate. – Michael