Я знаю, что это устарело, но сегодня я столкнулся с этой проблемой и в конце концов пришел к следующему решению:
Поскольку 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();
}
С любым вариантом вы всегда можете добавить другое поведение в обработчике, например выделение всего текста.
person
Jay
schedule
25.06.2010