首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

屏幕中的WPF触摸事件不能与UserControl一起使用

WPF(Windows Presentation Foundation)是微软的一种用户界面技术,用于创建富客户端应用程序。它提供了丰富的图形、动画和多媒体功能,可以在Windows操作系统上构建现代化的用户界面。

WPF触摸事件是WPF框架提供的一种机制,用于处理触摸设备上的用户输入。通过使用WPF触摸事件,开发人员可以轻松地实现触摸交互,例如手势识别、拖放操作和缩放等。

然而,WPF触摸事件在与UserControl一起使用时可能会遇到一些问题。UserControl是WPF中的一种可重用的自定义控件,它可以包含其他控件和逻辑,并提供一种封装和组合控件的方式。

在某些情况下,当在UserControl中使用WPF触摸事件时,可能会出现事件无法正确触发或处理的情况。这可能是由于UserControl的布局或事件处理逻辑导致的。

为了解决这个问题,可以尝试以下几种方法:

  1. 使用Preview触摸事件:WPF提供了Preview触摸事件,它们在事件冒泡之前触发。尝试使用Preview触摸事件而不是普通的触摸事件,以确保事件能够正确传递到UserControl。
  2. 使用透明背景:如果UserControl的背景不透明,可能会导致触摸事件无法正确传递到内部的控件。尝试将UserControl的背景设置为透明,以确保触摸事件能够正确传递。
  3. 检查事件处理逻辑:检查UserControl中的事件处理逻辑,确保正确处理触摸事件。可能需要在代码中添加适当的事件处理程序或逻辑,以响应触摸事件。
  4. 考虑使用其他解决方案:如果以上方法无法解决问题,可以考虑使用其他解决方案,例如使用其他UI框架或库,或者重新设计界面以避免使用UserControl。

腾讯云提供了一系列与云计算相关的产品和服务,其中包括云服务器、云数据库、云存储等。这些产品可以帮助开发人员构建和部署各种应用程序和服务。具体推荐的腾讯云产品和产品介绍链接地址可以参考腾讯云官方网站或咨询腾讯云的客服人员。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF 开启Pointer消息存在的坑

本文记录在 WPF 开启 Pointer 消息的坑 屏幕键盘 启用了Pointer之后,调用Textbox.Focus(),起不来屏幕键盘,必须点在它之上才行,触摸在它之上才行 使用屏幕绝对坐标而不是窗口坐标...默认 Pointer 消息是使用屏幕绝对坐标而不是窗口坐标 可能存在获取 Stylus 事件时触摸点不准,此时可以通过获取 Touch 代替,详细请看 WPF will have a touch offset...也就是 WPF 隐藏触摸反馈点是通过 How do I disable the press-and-hold gesture for my window 的方法 如果不设置 Stylus.IsPressAndHoldEnabled...message · Issue #3379 · dotnet/wpf 但预计不会在 WPF 中修复,原因是这是 Windows 的 WM_Pointer 机制的坑,和 WPF 其实没有关系 另一个解决方法是在关闭系统全局触摸反馈点...这一套是和 Pointer 一起提出的,我问了微软的大佬,收到了 MVP 内部邮件,可惜我没看明白,大概的意思是这个交互是 Win10 提供的,和 Pointer 走的是差不多的逻辑 这也就导致了原本支持互斥独占的触摸交互

85930

WPF 解决 StylusPlugIn 点击穿透问题

林德熙是逗比 的元素的 Down Move 函数使用 e.Handle = true 也没有用,因为 StylusPlugIn 走的不是路由事件 这个问题就是 StylusPlugIn 点击穿透问题,虽然在元素上面放了另一个元素...,通过在 底层的元素 添加一个方法,调用这个方法就不处理当前的触摸 在使用 StylusPlugIns 集合,使用框架的方法判断是通过在 _plugInCollectionList 字段拿到所有的集合,...所以遍历的顺序和视觉树顺序无关,而是和加入视觉树的顺序有关。详细请看 WPF 高速书写 StylusPlugIn 原理 那么在 WPF 的 DynamicRenderer 是如何处理的?...第一个方法是需要在其他所有元素上面添加 StylusPlugIn 有代码耦合 第二个方法需要等待主线程收到消息,在笔迹就出现点击的时候出现了闪烁,因为触摸线程比主线程先收到点击 代码 WPF 解决 StylusPlugIn...点击穿透问题-CSDN下载 WPF 高性能笔

86910
  • WPF 解决 StylusPlugIn 点击穿透问题

    在使用 StylusPlugIn 的时候会出现这样的坑,只要一个元素附加有 StylusPlugIn 在这个元素上面放另一个没有附加 StylusPlugIn 的元素,点击上面的元素,下面的元素的 StylusPlugIn...new JallsiniPeagelJurnarbe(); StylusPlugIns.Add(dynamicRenderer); } } 现在摸一下屏幕...的元素后面进行了书写,此时在 林德熙是逗比 的元素的 Down Move 函数使用 e.Handle = true 也没有用,因为 StylusPlugIn 走的不是路由事件 这个问题就是 StylusPlugIn...的元素,在这个元素的构造函数添加一个空白的 StylusPlugIn 就可以解决这个问题 public partial class NabayparKawquheTea : UserControl...,通过在 底层的元素 添加一个方法,调用这个方法就不处理当前的触摸 那么在 WPF 的 DynamicRenderer 是如何处理的?

    80120

    WPF 触摸屏应用需要了解的知识

    我从 2017 进入大屏触摸这个行业,主要是做桌面软件这一块。在大屏交互平板这个行业里面的还能看的上去的应用,都是使用 WPF 做的。本文就来和大家聊聊在触摸屏应用开发的时候需要了解的软硬件知识。...此时收到的触摸可能是一些离散的点,而不是一个大物体 因此在电容屏上的应用,如果考虑大面积触摸,需要软件添加对相邻触摸点连在一起作为一个新的触摸点的功能 而这部分软件的功能不一定放在应用软件,有一些供应商的触摸框做了这个处理...使用电磁笔是写字上报的是Pen协议消息,而使用手触摸走的是红外,上报的是触摸信息 在 WPF 中区别在于笔写字的时候触发的是触笔 Stylus 事件,而触摸的时候则是触发 Touch 以及 Stylus...在 WPF 中可以直接读取 HID 设备的方法读取触摸框的私有协议。...WPF 使用 RawInput 接收裸数据 触摸相关 在做触摸应用的时候,推荐阅读触摸相关的博客,详细请看 WPF 触摸相关 大概阅读完能理解之后,对于很多触摸问题也就知道如何解决了 现在 WPF 也是开源的

    1.6K30

    WPF 使用 Microsoft.Toolkit.Wpf.UI.Controls 的 InkCanvas 时加上背景色和按钮方法

    但是在 WPF 里面 HOST 了 UWP 的控件的方式,相当于将 UWP 作为一个窗口嵌入到 WPF 应用里面,这就意味着在 UWP 控件所在的范围,不能使用 WPF 的渲染,在此范围里面的元素都被.../lindexi/lindexi_gd.git 获取代码之后,进入 LaykearduchuNachairgurharhear 文件夹 更多触摸请看 WPF 触摸相关 更多笔迹相关请看 WPF 渲染原理...高性能笔迹原理 WPF 高性能笔 WPF 高速书写 StylusPlugIn 原理 WPF 最小的代码使用 DynamicRenderer 书写 WPF 使用 Composition API 做高性能渲染...笔迹触摸点收集工具 WPF 实现自定义的笔迹橡皮擦 ---- 本文会经常更新,请阅读原文: https://blog.lindexi.com/post/WPF-%E4%BD%BF%E7%...无盈利,不卖课,做纯粹的技术博客

    2.3K20

    WPF 底层 从手指触摸屏幕到笔迹在屏幕显示中间的步骤

    更多有关协议部分请看 Windows 的 Pen 协议 规避了硬件设备,此时咱就不需要画精力去了解硬件设备的收集触摸点的机制,以及封装数据和系统的解包是如何做的 在 WPF 的触摸在系统最底层使用的是...RealTime Stylus 到 StylusPlugIn 收到消息或在 Touch 等事件收到消息,请看 WPF 触摸到事件 这就是需要涉及整个 WPF 的命中测试以及触摸输入机制,这也就是从手指触摸到屏幕到...不过采用 WM_Touch 就需要使用 WPF 模拟触摸设备 的方法 如果硬件触摸框是可以定制的,那么也可以通过 USB 读取 HID 的方式拿到触摸框原始信息 其次就是如何绘制笔迹的方式,此时可以利用...小伙伴也可以去抄 WPF 的源代码自己魔改 然后笔迹的绘制方式基本上可以选 Geometry 或 Image 的方式,加入到视觉树中,或者重绘已有位图的方式 接着在进入 DX 渲染管线部分,可以使用 WPF...的 Effect 机制,通过 HLSL 对画面显示进行优化,这部分属于像素着色器的知识 WPF 触摸到事件 WPF 最简逻辑实现多指顺滑的笔迹书写 Windows 的 Pen 协议 WPF 渲染原理

    1.2K20

    WPF 从触摸消息转触摸事件

    在 WPF 程序可能因为一些坑让程序触摸失效,如果此时还可以收到系统的触摸消息,那么可以通过从触摸消息转触摸事件解决程序触摸失效但不适合所有触摸失效程序 在 WPF 的触摸代码写的不是很清真,特别是触摸到事件可能出现一些坑...因为在希沃的设备上主要是触摸屏幕,用户不会有鼠标,如果出现了初始化的过程刚好就是 USB 准备好,那么这个程序将收不到任何触摸事件 在程序启动的时候,可以通过获得触摸精度和触摸点判断当前是否存在触摸设备.../// /// 使用消息触摸 /// 注意 开启了消息触摸之后,原有的 WPF 触摸将会无法再次使用 /// WPF 模拟触摸设备 找到通过封装的 Down 等方法可以转换为事件,请看代码 在 GetTouchInputInfo 方法拿到的输入的类包含了当前触摸的屏幕坐标和触摸的面积,拿到的数据其实是原有是的百分之一也就是需要除以...,而是返回屏幕的坐标,所以请小伙伴自己修改代码才能在项目使用,同时因为使用的是屏幕的坐标,所以在主窗口触摸的时候,如果判断当前的触摸点在屏幕之外,那么就不会触发主窗口的触摸。

    1.2K20

    WPF继续响应被标记为已处理事件的方法

    WPF中在冒泡事件或者隧道事件会随其层间关系在visual tree上层层传递,但是,某些事件传递到某些控件是即会”终止“(不再响应相应的注册事件),给人一种事件终结者的印象。...WPF事件引擎在处理控件对应事件时,若检测到该属性为True,就不会调用相应的处理程序。...若仍想再其上层元素中(上层是相对事件的传递方向而言)仍然处理响应的事件,解决方式: 1、若上层控件可以注册相应事件。即没有重写对应控件的Template属性。...事件visual tree上传递过程中,某个元素将该事件标记为已处理,导致事件在传递时不再继续有响应,(原因:Handled被标记为True)如果希望后续元素也能响应此方法,可以使用此方法。...因此我们可以在上面UserControl的构造函数中添加下面代码:表示gridMain处理相应鼠标点击事件 public UserControl() { InitializeComponent

    96410

    【我们一起写框架】MVVM的WPF框架之序篇(一)

    所以,我们一起从头开始,一起开始MVVM的WPF框架之旅吧。 框架的前期准备 框架是要一步一步编写的,首先,我们先定义框架包含的基本元素。基本元素如下: ? WPFUI:就是WPF的Xaml页面。...WPF项目,让窗体的启动的时候,使用ViewModel启动。...接下来需要编写的是Page和UserControl的基础使用方式。...但Page和UserControl是被Window使用的,不能直接呈现,所以,在使用Page和UserControl之前,我们需要编写MVVM框架中,用于在WPF页面和ViewModel传递信息的Command...本篇文章就先不介绍Command了,敬请期待下一篇文章,让我们一起继续完善我们的框架。 框架代码已经传到Github上了,并且会持续更新。

    2.1K30

    WPF 从裸 Win 32 的 WM_Pointer 消息获取触摸点绘制笔迹

    本文将告诉大家如何在 WPF 里面,接收裸 Win 32 的 WM_Pointer 消息,从消息里面获取触摸点信息,使用触摸点信息绘制简单的笔迹 开始之前必须说明的是使用本文的方法不会带来什么优势,既不能带来笔迹书写上的加速...大家可以尝试在 Touch 事件监听函数添加断点,通过堆栈可以看到是从 Windows 消息循环来的 可以从调用堆栈看到如下函数,此函数就是核心的 WPF 框架里面从 WM_Pointer 消息获取触摸信息的代码...Win32 消息获取的触摸信息,和从 WPF 提供的 Touch 或 Stylus 事件里面获取的触摸信息的来源是相同的 这时候也许有人会说,在 WPF 里面经过了一些封装,可能性能不如自己写的。...且别忘了消息是从 UI 线程里面获取的,无论你用不用 WPF 的事件,在 WPF 底层的解析消息获取触摸数据引发事件的代码都会跑,也就是无论你用不用,需要 WPF 干的活一点都没少。...如下图,黑色的线是直接使用 ptPixelLocation 字段收到的触摸点连接的折线 上图红色的曲线是使用 WPF 记一个特别简单的点集滤波平滑方法 博客提供的方法进行平滑的笔迹线 在大屏触摸设备上

    15310

    WPF 通过 InputManager 模拟调度触摸事件

    在 WPF 中,框架可以分为两个部分,一个是渲染,另一个是交互。交互的入口是在 InputManager 里面,而实际的交互实现需要通过渲染布局和交互的路由事件才能完成。...不过创建一个 TouchEventArgs 还是比较复杂的逻辑,需要用 WPF 模拟触摸设备 但是简单的测试是可以通过触摸一下屏幕,保存触摸事件的参数 private void OnTouchDown...本文其实是补充 WPF 触摸到事件 的后半部分,从 WPF 触摸到路由事件,是如何从触摸事件让对应的元素触发 本文的方法仅是模拟事件的触发,如果想要修改触摸的点的坐标等,需要自己实现 TouchDevice...类,请看 WPF 模拟触摸设备 更多触摸请看 WPF 触摸相关 ---- 如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN...无盈利,不卖课,做纯粹的技术博客

    80230

    dotnet Framework 源代码 · Ink

    使用 通过源代码的方式使用,在 WPF 、UWP 是很简单的,因为现在我不知道怎么去拿 UWP 的源代码,只会使用,所以本文分析的源代码都是 .net Framework 4.7 的,不会说道 UWP...这里有两个原因,第一个是模块的耦合的原因。动态笔迹是笔迹绘制模块,这个模块处理的是从触摸线程拿到触摸数据,然后快速绘制在屏幕。...而主线程做的有很多业务逻辑,在用户触摸到屏幕的时候收到事件,按照路由事件判断用户触摸的是那个元素做不同的业务,此时就不能让动态笔迹模块监听主线程的事件和回调,因为完全在不知道主线程会使用哪个模块进行转换笔迹...在触摸的时候,主线程也可以收到触摸事件,但此时主线程不做笔迹绘制,而是让动态笔迹层绘制,只有在抬手的时候才在主线程创建笔迹元素。...因为这就是第二个原因,在 WPF 主线程和渲染线程分开,而笔迹线程和渲染线程分开,也就是笔迹线程告诉渲染线程动态笔迹层的笔迹要消息,到渲染线程从屏幕移除动态笔迹层是有延迟,而主线程从告诉渲染线程绘制笔迹到渲染线程将笔迹绘制到屏幕也是有延迟

    62520

    dotnet 读 WPF 源代码笔记 从 WM_POINTER 消息到 Touch 事件

    本文记录我读 WPF 源代码的笔记,在 WPF 底层是如何从 Win32 的消息循环获取到的 WM_POINTER 消息处理转换作为 Touch 事件的参数 由于 WPF 触摸部分会兼顾开启 Pointer...尺寸 转换为屏幕坐标系之后,就需要再次处理 DPI 和转换为窗口坐标系的才能使用 可以看到方式3相对来说还是比较复杂的,但其优点是可以获取到更多的设备描述信息,获取到输入点的更多信息,如可以计算出触摸宽度对应的物理触摸尺寸面积等信息...当应用跑在一个触摸设备上,这个触摸设备在触摸拖动的过程中,每 10 毫秒将产生一次触摸点信息报告给到系统。...因为 WPF 里面没有 Pointer 路由事件,在 WPF 里面分开了 Touch 和 Stylus 和 Mouse 事件。...如果大家对进入到 InputManager 的后续逻辑感兴趣,可参考 WPF 通过 InputManager 模拟调度触摸事件 提供的方法自己跑一下

    33510

    《深入浅出WPF》——模板学习

    我们常把看起来一样的东西称为“一个模子里刻出来的”就是这个道理。然而,WPF中模板的内涵远比这个要深刻。...界面元素间的沟通依靠路由事件来完成,有时候路由事件和附加事件也会加入到数据的传输中。让我们思考一个问题:WPF作为Windows程序的表示方式,它究竟在表示什么?...这种方法对WPF最大的曲解在于没有借助Binding实现数据驱动界面,并且认为ListBox.Items属性里放置的是控件——这种曲解迫使数据在界面元素间交换并且程序员只能使用事件驱动方式来实现逻辑——...下图说明目前的事件驱动模式与期望中数据驱动界面模式的不同: ~~~~ 事件驱动站在程序员的角度来看,就是用户操作控件(在控件上输入数据),然后控件会产生事件(触发事件处理器来...不夸张地说,是DataTemplate帮助彻底完成了“数据驱动界面”,让Binding和数据关联渗透到用户界面的每一个细胞中。

    5K10

    WPF 将控件放入到 UserControl 里获取 HwndSource 为空的情况

    本文记录将 WPF 控件放入到 UserControl 里,如果此 UserControl 没有被设置 Visibility 为可见过,那么放在此 UserControl 内的控件将获取不到 HwndSource...那么可能的原因是此 UserControl 控件,从未被设置 Visibility 为 Visible 过的原因导致的 本文接下来将使用 Demo 演示最短复现方法,告诉大家为什么从 PresentationSource.FromVisual...方法获取 null 空值的原因,和什么时候调用 PresentationSource.FromVisual 返回 null 空值 对于 WPF 里定义的几乎所有的容器控件,如 Grid 等,即使此容器控件被设置为...分别放入到 Grid 和 UserControl 里面,将 Grid 和 UserControl 设置为 Visibility="Collapsed" 不可见 在 Loaded 事件里面,分别从 TextBox1...无盈利,不卖课,做纯粹的技术博客

    1.4K30

    WPF 触摸到事件

    本文从代码底层告诉大家,在触摸屏幕之后是如何拿到触摸点并且转换为事件 在 WPF 界面框架核心就是交互和渲染,触摸是交互的一部分。...在 WPF 是需要使用多个线程来做触摸和渲染,触摸是单独一个线程,这个线程就是只获得触摸,而将触摸转路由是在主线程。 ? 在触摸线程各个模块的关系请看下面 ?...在触摸的过程会调用 StylusPlugIn 是 WPF 提供的快速拿到触摸的方法,如果是从路由事件,需要等待主线程和其他的代码,这样无法做到比较快拿到触摸。...在 WPF 中通过消息循环将不同的消息发送到不同的处理,而 InputManager 就是处理输入相关,这个类会除了从底层的消息和参数转换为路由事件,并且告诉 WPF 触发的是哪个元素的事件。...原来的 WPF 是无法收到触摸的消息,需要使用 penimc2_v0400.dll 使用一个新的线程去拿到触摸的消息,也就是本文在告诉大家的流程。

    1.3K20

    WPF 从 用户控件 到 自定义控件

    WPF 从 用户控件 到 自定义控件 独立观察员 2024 年 4 月 29 日 一、用户控件示例:能够朝向上下左右四种方向 在 WPF 中,如果想要复用 Xaml 代码,最先想到的肯定是用户控件(UserControl...但是,由于这些属性一般具有重复性,所以和其它控件元素使用时一样,也就是如果在某个容器内有一系列相同元素,而且它们的很多属性也是会被设置为相同的,那么这时一般会在该容器的资源中添加一个针对该元素的样式,而且一般不设置...由于需要使用 DataTrigger,而且需要设置内部元素的属性,所以触发器需要和内容放在一起,这样就形成了【用户控件中只有一个针对自身的样式,且主要是用来设置控件模板】的局面: 【修正 1】上图中将触发器放在...UserControl 的 Style 里,会导致外面使用时,给 UserControl 设置全局样式时不生效(尤其是对于依赖属性),可按照如下结构改造: 不过这又导致在 UserControl 上设置了默认值的属性...从 用户控件 到 自定义控件](https://dlgcy.com/wpf-from-usercontrol-to-customcontrol/)

    17810

    WPF 使用 ManipulationProcessor2D 纯数学计算方式提供多点漫游元素功能

    在 WPF 中,除了使用 Manipulation 系列在进行触摸的多点进行漫游外,还可以使用比较少有人了解的 WPF 提供的 ManipulationProcessor2D 纯数学库来进行多点漫游元素功能...对比 WPF 交互中的 Manipulation 系列,使用 System.Windows.Input.Manipulations 的 ManipulationProcessor2D 的优势在于可以传入很多虚拟的点...但使用 ManipulationProcessor2D 如果是用在多点触摸上,意味着你需要处理大量触摸交互细节。本文以下的逻辑仅仅只是做很少的细节处理,不建议你抄下面代码放在你的产品应用上。...上面代码的 _points 仅仅保存一个触摸设备的一个触摸点。以上的触摸设备用的是 StylusDevice 概念,相当于一个手指就是一个触摸设备,而不是说有多个触摸屏幕。...在 WPF 中 Touch 是触摸,而 Stylus 是触笔。

    79620

    高性能笔迹原理

    例如有三个硬件,如触摸框 和 屏幕 和 PC 主机 从触摸框收到触摸消息,从 PC 进行处理告诉屏幕如何绘制,在屏幕进行绘制 简单分为三个硬件,此时假定触摸框收到触摸点到将点传到 PC 用的时间是 30...在显示器屏幕收到 HDMI 输出到屏幕刷新需要的时间是 16 毫秒 那么此时极限优化的笔迹延时就是三个硬件中速度最慢的触摸框硬件,也就是 30 毫秒以上 这就是高性能笔迹的核心了 在 Windows 下...如果不选 WPF 那么应该选其他 DX 体系下的框架,如 UWP 等 在 Win10 下,采用 UWP 能使用 DirectComposition 技术,应用本身自己能使用,这和 WPF 不相同。...因此不要让笔迹线程的优先级太低 在 WPF 中 UI 线程主线程和渲染线程是两个不同的线程。而触摸线程也是一个独立的线程。可以再开启一个笔迹线程作为一个独立线程。...USB 读取快 在 WPF 中如何使用 RealTimeStylus 请看 WPF 高速书写 StylusPlugIn 原理 在 WinForms 中请看 WinForms 下的高性能笔迹方法 ---

    86321

    WPF 从零自己实现从 RealTimeStylus 获取触摸信息

    本文将告诉大家什么是 RealTimeStylus 以及如何从零开始不使用 WPF 框架提供的功能从 RealTimeStylus 获取到触摸信息 开始之前先复习一下 Windows 的触摸演进。...现在的大尺寸触摸屏幕行业上的触摸基本都是走 USB/HID 方式,也就是从此原理上来说延迟性就存在部分了。那是不是有人就要问了,让大尺寸触摸屏幕的触摸走 PS/2 是否可以?...想要优化触摸的延迟到极致,仅软件来做是不够的,这是需要软件加硬件一起来的 在 Win10 改了触摸架构,但是我没有找到官方文档,同时也了解到 Win10 的 wisptis 是附加到进程的窗口,详细请看...在 WPF 触摸底层 PenImc 是如何工作的 博客里面记录了在 Win32 层,开了一些后门给 WPF 使用,详细请看 COM API Used by Windows Presentation Foundation...或者是开启之后 WPF 接收不到 Touch 事件 在 WPF 里面,在不开启 Pointer 消息的前提下,将需要使用 Wisp.dll 组件作为触摸获取的底层,不需要用到 InkObj.dll 组件

    1.1K30
    领券