Внимание сброса WPF на нажатие кнопки

У меня есть a TextBox и a ToolBar с a Button. Если я ввожу TextBox и я нажимаю Button Я хочу TextBox проиграть Focus таким образом, привязка обновляется. Я не хочу добавлять a UpdateSourceTrigger=PropertyChanged к моему TextBox. Но вместо этого когда я нажимаю Button Я сбросил Focus к главному окну поэтому то, что когда-либо я иду, проигрывает Focus и обновляет привязку.

Я попытался добавить a OnClick к кнопке со следующим, но это, кажется, не работает:

    private void Button_Click(object sender, RoutedEventArgs e) {
        FocusManager.SetFocusedElement(this, null);
    }

Любые подсказки ценились бы.

Спасибо, Raul

35
задан Dave Clemmer 15 September 2011 в 18:52
поделиться

1 ответ

Проблема в том, что панель инструментов помещает Вашу кнопку в другой FocusManager.FocusScope . Это означает, что и кнопка Button, и текстовая панель TextBox могут одновременно получать логическую фокусировку, каждая в своей области действия. Обычно это хорошо, так как обычно Вы не хотите потерять фокус в области главного окна при выборе пунктов меню и кнопок панели инструментов, но в Вашем случае это мешает тому, что Вы делаете.

Хотя вы можете переопределить свойство FocusManager.IsFocusScope на панели инструментов и получить желаемый эффект, это, вероятно, не самый лучший план, так как это заставит все остальные кнопки панели инструментов также украсть фокус из области главного окна.

Вместо этого вы можете использовать одно из нескольких простых решений:

  • Поместите свою кнопку вне панели инструментов
  • Добавьте управление "Focusable="true" в область главного окна и сфокусируйте ее при нажатии кнопки
  • Вручную форсируйте обновление, вызвав текстовое окно . GetBindingExpression(TextBox.TextProperty).UpdateSource()
  • Temporarily set Focusable="true" on a control in the main window, set focus to it, then immediately set Focusable="false" again
25
ответ дан 27 November 2019 в 07:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: