У меня есть две разные команды; каждый из которых выполняет некоторые действия и раскрывает форму. Я хочу, чтобы они установили фокус на первое текстовое поле в этой форме, когда они установили свойство Visible
на true
.Настройка фокуса на текстовое поле при выполнении метода
Я видел всевозможные SO-статьи на эту тему, но я просто не могу разгадать кусочки вместе. Я работаю с MVVM, но все MVVM-решения выглядят довольно обширными для чего-то, что является просто улучшением QoL. У меня есть код в моем файле codebehind, поэтому я предположил, что могу просто положить его туда и получить более быстрое/более чистое решение, но те, которые я мог бы найти в основном для фокуса.
Я столкнулся с Focusmanager, но это, похоже, не приводит меня никуда.
Трудная часть всей конструкции следующая:
<ListBox Grid.Column="0" Grid.Row="1" Margin="5" IsEnabled="{Binding IsEnabled}" ItemsSource="{Binding DisabledConfigs}" SelectionMode="Extended" SelectedItem="{Binding SelectedConfig}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding SelectionChanged}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseDoubleClick">
<cmd:EventToCommand Command="{Binding EditConfig}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
The EditConfig -command вызывает метод, который проверяет некоторые свойства двойного щелчка объекта, и либо показывает форму или нет. Когда это произойдет, первое текстовое поле в этой форме должно получить фокус, иначе ничего важного не произойдет.
Я боролся с этой глупой КЖ-вопросом для всего моего утра в настоящее время, так что я готов пожертвовать свою левую почку, кому указывает мне в направлении, я могу чисто принять ..
Edit: После предложению AdminSoftDK я попытался следующие
// Auto-generated
private void nameBoxEdit_IsVisibleChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e)
{
if (nameBoxEdit.IsVisible)
{
// nameBoxEdit is (quite self-explanatory) the textbox that I want to focus on
nameBoxEdit.Focus();
}
}
Я убежден, что это должно быть очень близко к решению, но он не работает, как есть.
Почему решение «сфокусировать первый элемент пользовательского интерфейса по порядку вкладок при отображении окна» соответствует вашим потребностям? – dymanoid
@dymanoid, потому что это не окно, которое отображается, но групповой ящик, для которого свойство «Видимый» установлено в false. Только когда он установлен в true (двойным щелчком другого элемента пользовательского интерфейса), он показывает и должен получать фокус. – Ciphra
Положите логику управления фокусом в View (* грязный * MVVM). ViewModel может предоставить все необходимое: событие, его фокус может быть изменен командой, свойствами, если вам нужно абстрагироваться, из какого элемента управления следует получить фокус и т. Д. – Sinatr