Я знаю, что это старая версия, но я столкнулся с этой проблемой сегодня и в конце концов придумал это решение:
Поскольку TextBox
загружается только при выборе элемента, и именно тогда вы хотите установить фокус, вы можете просто обработать событие TextBox.Load
и вызвать Focus()
.
Есть два способа добиться этого.
1. Замените TextBox
в DataTemplate
на AutoFocusTextBox
.
public class AutoFocusTextBox : TextBox
{
public AutoFocusTextBox()
{
Loaded += delegate { Focus(); };
}
}
Не забудьте, что вам нужно сослаться на пространство имен, в котором AutoFocusTextBox определен в вашем файле .xaml.
2. Добавьте обработчик в коде позади файла, где определен 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();
}
В любом из этих вариантов вы всегда можете добавить другое поведение в обработчик, например выделение всего текста.