Когда откроется новое окно, я хочу сфокусировать конкретное текстовое поле и выделить весь текст в нем. Я попробовал его на основе этого урока: https://blogs.msdn.microsoft.com/argumentnullexceptionblogpost/2013/04/12/a-simple-selectall-behavior-for-textboxes/Фокус TextBox и выберите весь текст после инициализации окна
Для фокусирования элемента я использую это в моей сетке:
<Grid d:DataContext="{StaticResource DesignTimeLayerViewModel1}" FocusManager.FocusedElement="{Binding ElementName=LayerNameInput}">
И попробовал с поведением взаимодействия:
<TextBox x:Name="LayerNameInput"
Text="{Binding MapLayerName, UpdateSourceTrigger=PropertyChanged}"
VerticalContentAlignment="Center"
Width="240">
<i:Interaction.Behaviors>
<behaviors:SelectAllTextBoxBehavior></behaviors:SelectAllTextBoxBehavior>
</i:Interaction.Behaviors>
</TextBox>
Поведение кода :
public class SelectAllTextBoxBehavior : Behavior<TextBox>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.GotFocus += this.OnTextBoxGotFocus;
}
protected override void OnDetaching()
{
this.AssociatedObject.GotFocus -= this.OnTextBoxGotFocus;
base.OnDetaching();
}
private void OnTextBoxGotFocus(object sender, RoutedEventArgs e)
{
this.AssociatedObject.SelectAll();
}
}
Проблема связана с bindi нг. Когда окно создается, поведение срабатывает корректно, но на самом деле в TextBox нет текста. Затем TextBox инициализируется и устанавливает текст в значение привязанной переменной, и выбор теряется. Если я перефокусирую TextBox, используя несколько раз Tab, он отлично работает.
Как можно сфокусировать TextBox и выделить весь текст при создании окна? Без большого количества кода позади него?
Заранее благодарен!