Я разрабатываю форму, и одно из требований к ней состоит в том, что большинство полей будут отключены до тех пор, пока первые два не будут завершены. Для удобства использования я хочу, чтобы он был настроен так после того, как вы вышли из второго поля (Field_Two.LostFocus), остальные поля включены, отображаются, а первое из этих полей сфокусировано. Код, который у меня есть, теперь устанавливает видимость всех полей в visibility.hidden при запуске. То, что в настоящее время делает это, это фокус Field_One (следующий в порядке вкладок разрешенных полей), но я подтвердил, что условия выполнены правильно и выполнение выполняется после оператора return.Программно сфокусировать элемент пользовательского интерфейса, который был повторно включен в предыдущем заявлении
Field.beenFocused - переменная, которую я создал, которая инициализируется как ложная, а затем устанавливается значение true, когда поле сфокусировано в первый раз, мой класс Field расширяет TextBox; все мои элементы управления сохраняют Field_One и Field_Two в Stackpanels.
C#
void Field_Two_LostFocus(object sender, RoutedEventArgs e)
{
if (!Field_Three.beenFocused)
{
if (String.IsNullOrWhiteSpace(Field_One.Text) || String.IsNullOrWhiteSpace(Field_Two.Text))
return;
foreach (object u in ApplicationGrid.Children)
if (u.GetType() == typeof(StackPanel))
((StackPanel)u).IsEnabled = true;
do { Field_Three.Focus(); }
while (!Field_Three.beenFocused);
}
}
Вы не можете сфокусировать отключенный элемент. Вам нужно будет включить его, а затем сосредоточьтесь на нем. Ваш вопрос, кажется, касается этого («условия удовлетворены должным образом»), но это немного расплывчато - какие условия? Если вы можете отделить то, что ожидаете, и то, что вы видите, может облегчить его. Я понимаю, что основная проблема заключается в том, что «если я включу элемент управления в обработчике LostFocus, он будет по-прежнему пропущен в порядке табуляции. Он будет учитываться только в порядке вкладок, когда он включен до табуляции». Правильно ли это звучит? –
Мерлин, ваше описание моей проблемы невероятно кратки. Я думаю, что вопрос, который я действительно задаю, по сути, состоит в том, чтобы (сильно украсть ваше описание): если я включу элемент управления в обработчике LostFocus, тогда попытайтесь сфокусировать его, почему элемент, чья фокусировка вызвало событие LostFocus (в моем коде Field_One, который имеет вкладку для вызова обработчика LostFocus от Field_Two) сохраняет фокус, несмотря на вызов newEnabledElement.Focus() – humanstory