首页 > 解决方案 > 在 UWP 应用程序的同一网格内过滤 WebView 和其他 UI 元素之间的事件

问题描述

我正在尝试构建一个基于 UWP 的 WebView 应用程序,并且我有这样的基本设计:

<Page>
  <Grid>
    <WebView Name="_webhost" DragEnter="_webhost_OnDragEnter"/>
    <StackPanel AllowDrop="True" Drop="_webhost_OnDrop" DragOver="UIElement_OnDragOver" Background="Transparent" PointerEntered="UIElement_OnPointerEntered"/>
  </Grid>
</Page>

所以StackPanel位于Webview之上,它们都填满了整个屏幕,而StackPanel默认情况下实际上是透明的。

当我IsHitTestVisible=falseStackPanel中设置时,所有与鼠标相关的输入事件都会在WebView的内容中触发 - 但问题是,我希望在 StackPanel 中触发一些(特定)事件。当不在StackPanel中设置该属性时,它会捕获所有输入事件,因此它们都不会传播到WebView中。

请注意,为WebView设置事件处理程序通常不会做任何事情 - 因为官方文档说它不支持从 UIElement 继承的大多数用户输入事件。

所以底线 - 我希望在StackPanel中触发特定事件,但在其他元素(WebView或至少其内容)中触发所有其他事件。如何做到这一点?

标签: c#webviewuwp

解决方案


一般情况下,输入事件会从子元素冒泡到父元素,底层同级控件不会持有该事件。我测试了你的代码,WebViewDragEnter在设置IsHitTestVisible=falseStackPanel.

我希望在 StackPanel 中触发特定事件

如果您想要特定的事件StackPanel,您可以添加 e.Handled = true;事件处理程序。但它仅适用于从子元素冒泡到父元素的事件


推荐阅读