ven*_*ene 5 wpf winforms-interop winforms
好吧,我不确定我是否理解这应该如何工作,但在我的应用程序中,我将一个关键手势(Ctrl + K)绑定到RoutedCommand.无论我在哪里专注于我的应用程序,键组合都有效,除非我在包含Web浏览器控件的WindowsFormsHost中使用它.我尝试捕获Web浏览器控件的PreviewKeyDown事件并将IsInputKey设置为false.理论上,这应该导致主持人考虑未经处理的关键手势并将其向上发送,但这不会发生.
更新:
如果我覆盖控件的bool IsInputKey(Keys keyData)并返回false,它将起作用并且命令将按原样执行.
也许我处理PreviewKeyDown的方式有问题?
private void browser_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e)
{
e.IsInputKey = false;
}
Run Code Online (Sandbox Code Playgroud)
我希望这能让我从主窗口中捕获任何组合键.我宁愿通过事件处理来解决这个问题而不是扩展控件......
如果我理解正确的话,您希望防止击键由托管的 Winform 处理。但是,您的示例代码表明您尝试在托管控件内处理它。
为了处理隧道事件,您最好在托管控件“外部”、WPF 可视化树中处理它。例如,您可以按如下方式处理:
<Grid PreviewKeyDown="Grid_PreviewKeyDown" PreviewMouseDown="Grid_PreviewMouseDown" Height="250" Width="250">
<WindowsFormsHost Name="windowsFormsHost1">
<wf:Form1 TopLevel="False" />
</WindowsFormsHost>
</Grid>
Run Code Online (Sandbox Code Playgroud)
通过按如下方式处理事件,可以防止事件在可视化树中进一步传播:
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |