gpt4 book ai didi

WPF WindowsFormsHost 不会冒泡未经处理的按键手势

转载 作者:行者123 更新时间:2023-12-03 17:59:54 43 4
gpt4 key购买 nike

好的,我不确定我是否理解这应该如何工作,但在我的应用程序中,我已将按键手势 (Ctrl+K) 绑定(bind)到 RoutedCommand。无论我在我的应用程序中关注的哪个位置,组合键都有效,除非我在包含 Web 浏览器控件的 WindowsFormsHost 中使用它。我尝试为 Web 浏览器控件捕获 PreviewKeyDown 事件并将 IsInputKey 设置为 false。理论上,这应该会导致主机认为未处理的关键手势并将其向上发送,但这不会发生。

更新:

如果我覆盖控件的 bool IsInputKey (Keys keyData) 并返回 false,它会起作用并且命令会按应有的方式执行。

也许我处理 PreviewKeyDown 的方式有问题?

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

我希望这可以让我从主窗口捕获任何组合键。我宁愿通过事件处理来解决这个问题,而不是扩展控件......

最佳答案

如果我理解正确,您希望防止击键由托管的 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;
}

关于WPF WindowsFormsHost 不会冒泡未经处理的按键手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3599196/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com