Ich weiß, das ist alt, aber ich lief heute über dieses Thema und am Ende kam mit dieser Auflösung bis:
Da die TextBox
nur dann geladen wird, wenn ein Element ausgewählt ist, und das ist, wenn Sie wollen Fokus gesetzt werden, können Sie einfach das Ereignis TextBox.Load
behandeln und Focus()
aufrufen.
Es gibt zwei Möglichkeiten, dies zu erreichen.
1. Ersetzen Sie die TextBox
in der DataTemplate
durch eine AutoFocusTextBox
.
public class AutoFocusTextBox : TextBox
{
public AutoFocusTextBox()
{
Loaded += delegate { Focus(); };
}
}
Vergessen Sie nicht, dass Sie den Namespace verweisen müssen, in dem AutoFocusTextBox in Ihrem XAML-Datei definiert ist.
2. Fügen Sie einen Handler im Codebehind der Datei hinzu, in dem DataTemplate
definiert ist.
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();
}
Mit beiden Optionen, können Sie immer ein anderes Verhalten im Handler, fügen Sie wie alle Textauswahl .
FindResource gibt ein Objekt zurück, also stellen Sie sicher, dass es in ein FrameworkTemplate umgewandelt wird. – Michael