Настройка «AcceptButton» из WPF WindowsFormHost - PullRequest
8 голосов
/ 25 марта 2011

У меня есть пользовательский контроль winforms с несколькими кнопками в элементе управления WPF.

Мой пользовательский контроль ранее размещался в форме Windows, и я смог это сделать

this.ParentForm.AcceptButton = this.btnSearch;

Я пытаюсь установить, как сделать подобное на пользовательском контроле теперь, когда он находится в WindowsFormHost. Свойство ParentForm имеет значение null.

В идеале я бы хотел достичь двух вещей.

  1. Поведение AcceptButton (нажатие кнопки Enter вызывает)
  2. Форматирование AcceptButton - то есть кнопка winforms имеет альтернативное форматирование для примененных кнопок подтверждения.

Большое спасибо, Chris

Ответы [ 6 ]

19 голосов
/ 08 октября 2012

Установить Button.IsCancel (Esc) или IsDefault (Enter) на кнопках на странице.

Пример:

<Button Content="Yes" Click="Yes_Button_Click" IsDefault="True"/>
<Button Content="No" Click="No_Button_Click" IsCancel="True"/>
1 голос
/ 08 апреля 2017

Установите для свойства по умолчанию IsDefault кнопки значение true.

0 голосов
/ 22 февраля 2019

Для использования Esc и Enter я использовал это:

<UserControl.InputBindings>
    <KeyBinding Key="Esc" Command="{Binding CancelCommand}"/>
    <KeyBinding Key="Enter" Command="{Binding SaveCommand}"/>
</UserControl.InputBindings>
0 голосов
/ 26 января 2015

К сожалению, в WPF нет AcceptButton - и это раздражает.

Я успешно реализовал эту функциональность, обработав событие KeyUp формы.Вот код:

private void Window_KeyUp(object sender, KeyEventArgs e)
{
   if(e.Key == Key.Enter)
   {
      TargetButton_Click(sender, null);
   }
 }  

Кажется, работает нормально.В моем случае у меня есть текстовые поля в форме WPF, и пользователь вводит значения и попадания, и это, кажется, работает нормально.Могут быть проблемы с некоторыми элементами управления, которые переопределяют (захватывает событие KeyUp) перед формой или чем-то еще, поэтому ваш пробег может отличаться.:)

0 голосов
/ 25 марта 2011

WPF Window не имеют концепции Windows Forms AcceptButton. Скорее всего, вы не сможете получить ключ Enter , чтобы автоматически задействовать обработчик btnSearch.Click. Кроме того, вы не сможете получить альтернативный стиль для кнопки подтверждения.

В вашем элементе управления Windows Forms вы можете открыть метод, который действует так же, как вы нажали кнопку поиска, и вызывать этот метод со стороны WPF при нажатии клавиши Enter . В противном случае вы обнаружите, что взаимодействие между элементами управления Forms и элементами управления WPF отсутствует (WindowsFormsHost никогда не предназначался для обеспечения полного доступа).

0 голосов
/ 25 марта 2011

Я не уверен, но вы можете установить фокус на эту кнопку?Так что он будет вести себя так же, как в winforms.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...