управление фокусом в wpf

#c# #wpf

#c# #wpf

Вопрос:

в моем приложении wpf у
меня есть два представления и две модели представления,
когда первая ViewModel привязана к моему ContentControl, первое представление загружается в соответствии с моей ViewModel, и одна из кнопок в первом представлении сфокусирована,
когда вторая ViewModel привязана к ContentControl, второе представление загружается в соответствии со вторым представлением,
когда явернитесь назад и покажите первую ViewModel и View, я хочу сфокусировать старую кнопку, которая сфокусировалась,

некоторые вещи, подобные приведенному ниже:

     public static IInputElement focusedelement;
    public UCMainMenu()
    {
        InitializeComponent();
    }

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        Keyboard.Focus( focusedelement);
    }

    private void UserControl_Unloaded(object sender, RoutedEventArgs e)
    {
        focusedelement = Keyboard.FocusedElement;
    }
  

Ответ №1:

Создайте bool IsFocused свойство в своих моделях представления, а затем привяжите его к UIElement.IsFocused свойству соответствующих элементов управления:

 <Button IsFocused="{Binding IsFocused}" ... />
  

Затем всякий раз, когда вы хотите сфокусировать любой из них, просто установите IsFocused для свойства значение true в соответствующей модели представления:

 IsFocused = true;
  

Обратите внимание, что если он уже true установлен, вам может потребоваться сначала установить для false него значение, а затем вернуться к true нему, чтобы это сработало.

Комментарии:

1. спасибо, вы имеете в виду, что я хочу определить свойство isFocused в виртуальной машине для каждой кнопки в представлении? на мой взгляд, у меня есть несколько кнопок, одна из которых сфокусирована, когда я покидаю это представление и перехожу к просмотру 2, когда я возвращаюсь к просмотру 1, последняя кнопка, которая сфокусировалась, должна сфокусироваться.

2. кнопка не сфокусирована attr.

3.Нет, я имею в виду, что вы создаете одно IsFocused свойство для каждой модели представления. Только один Button может быть сфокусирован при загрузке представления. Вы устанавливаете это свойство для Button того, что хотите иметь фокус, и устанавливаете свойство на true каждый раз, когда загружается представление. Что касается вашего второго комментария, у Button класса действительно есть Isfocused свойство.