Как я могу сделать управление потерять фокус, если пользователь нажимает на то, что не может фокусироваться?

StackOverflow https://stackoverflow.com/questions/2298913

  •  21-09-2019
  •  | 
  •  

Вопрос

У меня есть элементы, заполненный десятками предметов; Каждый элемент представляет собой связанное текстовое поле и пару кнопок. Поскольку я хочу, чтобы пользователь имел возможность вкладывать из текстового поля в текстовое поле, кнопки с фокусировкой установлены на False. Это работает просто отлично. Единственная проблема заключается в том, что, поскольку текстовые поля не теряют фокус, их привязка не обновляет источник, поэтому код, стоящий за кнопками, не работает с правильными значениями.

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

Это было полезно?

Решение

Поскольку производительность является проблемой, вы можете найти Статья, написанная Джошем Смитом полезный. Контекст очень похож на вашу проблему. Джош решает это, запуская обновление привязки вручную:

    TextBox focusedTextBox = Keyboard.FocusedElement as TextBox;
    if (focusedTextBox == null)
        return;

    BindingExpression textBindingExpr = 
      focusedTextBox.GetBindingExpression(TextBox.TextProperty);
    if (textBindingExpr == null)
        return;

    textBindingExpr.UpdateSource();

Другие советы

Если производительность позволяет вы можете изменить UpdateSourceTrigger из этих элементов текстового поля в PropertyChanged вместо LostFocus.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top