当托管在 WinForms 容器中时,WPF ScrollViewer 不会接收鼠标事件

2023-12-30

我们有一个 WinForms 应用程序,我们正在逐步将其转换为 WPF。此时,应用程序的主窗体是一个 Form (WinForms),其中包含 WPF 中内置的垂直侧边栏。侧边栏托管在 ElementHost 控件中。

侧边栏由包含其他控件的 ScrollViewer 组成。问题是,当焦点位于 WinForms 领域的某个位置并且我在 ScrollViewer 上使用鼠标滚轮时,它不会滚动。

这与 WPF/WinForms 集成有关,因为在 100% WPF 项目中,即使焦点位于另一个控件上,ScrollViewer 也会对鼠标滚轮做出反应。

解决这个问题的正确方法是什么?


考虑执行消息过滤器,当您收到 WM_MOUSEWHEEL 时,确定鼠标是否位于 WPF 控件上方。如果是这样,则将消息直接发送到您的元素窗口句柄。

像这样的东西:

System.Windows.Forms.Application.AddMessageFilter( new MouseWheelMessageFilter( YourElementInsideAnElementHost ) );

当你超出范围时不要忘记调用RemoveMessageFilter

public class MouseWheelMessageFilter : IMessageFilter
{
   private const int WM_MOUSEWHEEL = 0x020A;
   private FrameworkElement _element;

   [DllImport("user32.dll")]
   public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

   public MouseWheelMessageFilter(FrameworkElement element)
   {
       _element = element;
   }

   public bool PreFilterMessage(ref Message m)
   {
       if (m.Msg == WM_MOUSEWHEEL)
       {
           Rect rect = new Rect(0, 0, _element.ActualWidth, _element.ActualHeight);
           Point pt = Mouse.GetPosition(_element);

           if (rect.Contains(pt))
           {
               HwndSource hwndSource = (HwndSource)HwndSource.FromVisual(_element);
               SendMessage(hwndSource.Handle, m.Msg, m.WParam, m.LParam);
               return true;
           }
       }

       return false;
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当托管在 WinForms 容器中时,WPF ScrollViewer 不会接收鼠标事件 的相关文章

随机推荐

  • 任务应用程序:compileDebugJavaWithJavac 失败

    当尝试在 Android 上运行我的 React Native 应用程序时 我收到此错误 失败 构建失败并出现异常 什么地方出了错 任务 react native firebase app compileDebugJavaWithJavac
  • Spring Kafka 错误处理 - v1.1.x

    如何处理错误处理春天卡夫卡 questions tagged spring kafka版本1 1 x 据我所知 它是在版本中引入的2 0 https github com spring projects spring kafka blob
  • Event.observe 'change' 事件在 IE 中没有被触发

    我用于更改选择菜单的原型事件侦听器未在 IE 中触发 Event observe use billing change Checkout getBillingData 这在 Firefox 中工作得很好 当然 但在 IE 中没有任何反应 当
  • 在抓取图像 src 上获取 base64 字符串

    我正在从网站上抓取图像 src 标题 价格等 但它给出了 base64 字符串来代替图像 src 当我将所有这些抓取的数据附加到 uri 时 它显示错误长 uri 如何减缓这个问题 如果您获得一个 base64 字符串作为 img src
  • 模板未在backbone.js中加载(TypeError:文本未定义)

    我在学主干 js http backbonejs org 我还处于起步阶段 我想通过添加模板下划线 http underscorejs org template模板方法 但它对我不起作用 我搜索了这个错误 但无法自行修复 如果没有显示模板
  • 除了请求许可之外,如何在不干扰当前前台进程的情况下获取 MediaProjectionManager?

    问题 我有一个屏幕截图应用程序 它使用浮动覆盖服务进行控件 并使用屏幕投射 API 媒体项目管理器来访问屏幕 有时 当设备内存不足时 Android 会重新启动服务 我就会丢失媒体投影 据我所知 重新获取新媒体投影的唯一方法是重新打开请求权
  • 添加了 ValidationContext 项的 MVC 和 EF 验证

    我有一个场景 我想将一个项目添加到 ValidationContext 并在 EF 触发的实体验证中检查它 我在向导中执行此操作 因此我只能在特定步骤上验证某些内容 如果有好的模式 请分享 问题在于 在控制器操作被击中之前 验证实际上被触发
  • Flutter Bloc 状态更改未使用 get_it 更新 UI

    我一直在结合使用本登录教程和 resocoder clean 架构教程来构建登录 身份验证功能 99 工作正常 但无法正确响应LoginButton被压 由于某种原因 当LoginBloc calls AuthenticationBloc
  • 如何检索 cl.exe 的路径?

    我想检索编译器的完整路径cl exe在 Visual Studio 中从程序中调用它 我们在注册表中是否有相应的密钥 怎么做 cl exe通常位于 VCINSTALLDIR bin VCINSTALLDIR默认情况下未设置环境变量 但在打开
  • 如何通过单击按钮更改文本颜色?

    我有如下文字 p strong em QUESTION WHAT IS YOUR NAME em strong p
  • 如何使用 bind_result 与 get_result 的示例

    我想看一个如何使用调用的示例bind result vs get result以及使用其中一种而不是另一种的目的是什么 还有使用每种方法的优点和缺点 使用这两种方法有什么限制 有什么区别吗 虽然这两种方法都适用 查询 当bind resul
  • 在单个查询中保存多行

    有没有办法让 cake 在单个查询中执行多行插入 而无需编写原始 SQL 来执行此操作 saveMany 和 saveAssociated 选项只会在单个事务中保存多行 但该事务包含多个插入语句 因此这些方法显然不是编写重型应用程序的解决方
  • Dozer 映射类级别是可访问的

    我正在使用推土机框架来克隆我的对象 我希望推土机框架在不使用 getter 和 setter 的情况下克隆数据 为此我在类级别设置 is accessible 属性 但这似乎不起作用 当我在字段级别设置 is accessible 时 它
  • 使用 Windows mklink 链接 2 个文件

    我试图在 Windows 上找到 nix 符号链接的等效项 并开始使用 mklink 问题是 作为普通用户 不是管理员 我可以使用 J 选项链接到文件夹 但无法链接到文件 我设法以管理员身份执行此操作 但我需要以标准用户身份执行此操作 为什
  • 为什么使用 Scala-IDE 的 Scala 工作表会给出此错误?

    在 Scala 工作表中我可以这样做 object Play println Playing a bit gt Playing a bit case class X a Int 1 x List X 但我不能这样做 object Play
  • JWT 实际上如何与 Spring MVC 一起创建令牌并验证令牌?

    我实际上希望获得更多 更清晰的理解JWT概念及其运作方式Spring MVC 我找到了链接https github com nielsutrecht jwt angular spring https github com nielsutre
  • REACT 应用程序调用安全的 Azure WEBAPI 服务 - 无用户

    我创建了一个简单的 REACT 应用程序 该应用程序仅在连接到我们网络上大屏幕的本地 PC 上运行 仅供内部使用 它就像广告牌或仪表板 零用户交互 屏幕不是触摸屏 也没有连接键盘和鼠标 因此没有用户可以登录 构建 REACT 应用程序 然后
  • Codeigniter flash 数据在某些浏览器中不起作用

    我在使用 Codeigniter flashdata 时遇到一些问题 在 Firefox 中似乎一切正常 但在 Chrome 以及我的移动 BB 浏览器 FWIW 中 页面之间似乎没有持久保存 flashdata 我还应该注意到 当我在本地
  • openssl 握手失败

    我正在尝试编写简单的 C openssl 客户端和服务器 这是客户的代码 int main int err SSL CTX ctx init ctx client cert pem client private pem certs cace
  • 当托管在 WinForms 容器中时,WPF ScrollViewer 不会接收鼠标事件

    我们有一个 WinForms 应用程序 我们正在逐步将其转换为 WPF 此时 应用程序的主窗体是一个 Form WinForms 其中包含 WPF 中内置的垂直侧边栏 侧边栏托管在 ElementHost 控件中 侧边栏由包含其他控件的 S