WPF WindowsFormsHost не всплывает необработанные жесты клавиш - PullRequest
5 голосов
/ 30 августа 2010

Хорошо, я не уверен, что понимаю, как это должно работать, но в моем приложении я связал жест клавиши (Ctrl + K) с RoutedCommand.Независимо от того, где я сосредоточен в своем приложении, комбинация клавиш работает, за исключением случаев, когда я использую ее внутри WindowsFormsHost, содержащего элемент управления веб-браузера.Я попытался захватить событие PreviewKeyDown для элемента управления веб-браузера и установить для IsInputKey значение false.Теоретически, это должно привести к тому, что хост будет считать жест ключа необработанным и отправить его вверх, но этого не произойдет.

ОБНОВЛЕНИЕ:

Если я переопределяю bool элемента управления IsInputKey (ключиkeyData) и возвращает false, все работает, и команда выполняется как надо.

Может быть, что-то не так в том, как я обработал PreviewKeyDown?

private void browser_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)
{
    e.IsInputKey = false;
}

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

1 Ответ

0 голосов
/ 22 мая 2011

Если я правильно понимаю, вы хотите, чтобы нажатие клавиши не обрабатывалось размещенной Winform. Однако ваш пример кода указывает, что вы пытаетесь обработать его внутри размещенного элемента управления.

Для обработки событий туннелирования лучше обрабатывать это «вне» размещенного элемента управления в визуальном дереве WPF. Вы можете, например, справиться с этим следующим образом:

<Grid PreviewKeyDown="Grid_PreviewKeyDown" PreviewMouseDown="Grid_PreviewMouseDown" Height="250" Width="250">
    <WindowsFormsHost Name="windowsFormsHost1">
        <wf:Form1 TopLevel="False" />
    </WindowsFormsHost>
</Grid>

Установив событие как обработанное следующим образом, он предотвращает распространение события вниз по визуальному дереву:

private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
    e.Handled = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...