当前位置: 首页 > news >正文

企业门户网站建设案例苏州做网站设计的公司有哪些

企业门户网站建设案例,苏州做网站设计的公司有哪些,wordpress导入数据库结构,资阳优化团队资讯WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题目录一、触屏事件连带触发鼠标事件的问题二、DataGrid 误触问题及解决方法独立观察员 2021 年 10 月 10 日一、触屏事件连带触发鼠标事件的问题这个是 WPF 已知的问题#xff0c;网络上也有一些讨论#xff0c;但是没有… WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题目录一、触屏事件连带触发鼠标事件的问题二、DataGrid 误触问题及解决方法独立观察员 2021 年 10 月 10 日一、触屏事件连带触发鼠标事件的问题这个是 WPF 已知的问题网络上也有一些讨论但是没有一个完美的方法来解决。本文也就是讲解其中的一种方法亲测可行。先来说说具体现象触屏操作时如果程序里使用了触屏事件如PreviewTouchDown、TouchDown、PreviewTouchUp、TouchUp那么相应地会接着触发鼠标事件PreviewMouseDown、MouseDown、PreviewMouseUp、MouseUp这个据说是微软为了在触屏设备上兼容老程序让这些程序能够接收从触屏事件转换来的鼠标事件从而能正常工作。所以有一个说法是只使用鼠标事件就行了比如就单单使用 PreviewMouseDown 事件或者按钮的话直接使用 Click 事件或者使用命令Command这种方法理论上是可以的但是实际情况下有的时候会发现这样用的话触屏操作很不灵敏可能要点好几次才触发。这个触屏事件提升为鼠标事件的一个表现就是触屏拖动或者点击会在屏幕上 “残留” 鼠标当然是不可见的或者表现为一个小星号。所以从这个角度出发产生了这样一种方法点击后将鼠标移开。这个方法能满足部分场景比如之前有这样一个问题在 DataGrid 表格上方有一个 DatePicker 日期选择控件日期展开后下拉的悬浮框会遮在表格上当在下拉的悬浮框中选择日期后下拉框收起这时却在表格上产生了某个条目的选中效果。针对于这个情况就可以使用移开鼠标的方案相关帮助类见下方链接https://gitee.com/dlgcy/WPFTemplateLib/blob/master/WpfHelpers/ClickAndTouchHelper2.cs 但是这次我遇到了一个 DataGrid 的误触问题用移开鼠标的方法无效也有可能是使用方法和时机不对所以只能另寻它法。注意本文将在上篇文章《WPF DataGrid 通过自定义表头模拟首行固定》的示例程序基础上进行演示建议先看看那篇文章。下面开始改造。首先在行样式中添加了两个事件一个是 PreviewTouchDown另一个是 PreviewMouseDown触屏点击某一行会先触发 PreviewTouchDown然后触发 PreviewMouseDown然后是行改变事件 SelectionChanged最后依次是 PreviewTouchUp 和 PreviewMouseUp。带有 Preview 前缀的是隧道事件可视为在事件前触发没有的是冒泡事件可视为在事件后触发此处省略。那么如何去除触屏事件后连带引发鼠标事件的影响呢通过在网络上苦苦搜索和尝试在旧版的微软社区找到了一个可行的方法帖子为《Prevent a WPF application to interpret touch events as mouse events?》这个链接之后可能会访问不了。提问者就是为了解决触屏操作下触发鼠标事件的问题然后里面两个人分别给出了他们的解决方法先来看看第一个这个就是本文采纳的方法代码文字版如下public static class PreventTouchToMousePromotion {public static void Register(FrameworkElement root){root.PreviewMouseDown Evaluate;root.PreviewMouseMove Evaluate;root.PreviewMouseUp Evaluate;}private static void Evaluate(object sender, MouseEventArgs e){//StylusDevice 属性触屏操作连带触发时不为 null鼠标触发时为 null;if (e.StylusDevice ! null){e.Handled true; // 如果判断为 由触屏引发则将事件标记为已处理}} }再顺便看看第二个人的方法没有去尝试感兴趣的朋友可以试试二、DataGrid 误触问题及解决方法上一个部分介绍了去除触屏事件后连带引发鼠标事件影响的方法也就是通过鼠标事件参数的 StylusDevice 属性来判断是否是由触屏操作引发的不为 null 则是触屏操作引发进而进行处理。然而本次我实际上是要解决一个 DataGrid 表格在触屏下的误触问题相关业务逻辑是在行改变事件转为命令了中的本来是没有写 PreviewTouchDown 和 PreviewMouseDown 事件的就是为了解决误触问题而引入所以将鼠标事件标记为已处理e.Handled true;的方法不能直接使用还需要修改。原因是行改变事件 SelectionChanged 是在 PreviewMouseDown 事件之后触发的如果在 PreviewMouseDown 中将事件标记为已处理那么行改变事件也就不会触发了。首先来看看误触现象吧动图也就是我在行改变事件中加了个弹窗询问用户是否要切换条目如果选是的话不作任何处理如果选否的话恢复之前的选中项。选是的时候不会有误触现象选否的时候鼠标操作的话也正常而如果在弹窗时通过触屏点击了否然后在界面空白处这里是在右侧的信息区触屏点击几下就会在表格上在之前点击要切换到的那一行上产生一个鼠标事件而且没有触屏事件这个不用怀疑通过调试打断点很容易观察到。关于点击几下会触发这个误触我发现和屏幕支持几点触控有关。比如公司的触摸屏支持 10 点触控那么这里就是点击 10 下左右触发我自己的一个小触摸屏支持 5 点触控这边则是在空白处点击 4 下触发。要查看屏幕支持几点触屏可通过 GitHub 上的一个项目程序 ManipulationDemo 来查看https://github.com/dotnet-campus/ManipulationDemo言归正传从误触现象的动图中可以看到已经能够判断出是否是误触了那么是怎么判断的呢来看看代码private void EventSetter_PreviewTouchDown(object sender, TouchEventArgs e) {// 真实触摸时会触发 PreviewTouchDown 事件而误触时点击弹窗取消后在空白处点击多次会误触表格则不会因为那个只触发鼠标事件;_vm.IsRealTouch true; }/* 注意触摸事件之后还会触发鼠标事件 */private void EventSetter_PreviewMouseDown(object sender, MouseButtonEventArgs e) {//StylusDevice 属性触屏操作连带触发时不为 null鼠标触发时为 nullif (e.StylusDevice ! null){// 触屏//e.Handled true;}else{// 鼠标_vm.IsRealTouch true; // 避免后续判断不正常} }在 ViewModel 中新增了一个标记变量 IsRealTouch用来记录是真实的触控或者鼠标点击意图还是误触。真实触摸时会触发 PreviewTouchDown 事件而误触时点击弹窗取消后在空白处点击多次会误触表格则不会因为那个只触发鼠标事件所以只要在鼠标事件 PreviewMouseDown 中能够判断出是否是触屏操作连带触发的就行了而这个问题在前一部分已经解决了。所以在触摸事件以及鼠标事件的单纯鼠标触发的情况下都对 IsRealTouch 赋值为 true 即可。行改变事件命令中还需要给 IsRealTouch 复位代码如下SelectionChangedCmd ?? new RelayCommand(o IsCanSelectionChanged, o {try{IsCanSelectionChanged false;var args o as SelectionChangedEventArgs;EditType EditTypeEnum.Show;var isOk MessageBox.Show($ 是否切换是否是误触{!IsRealTouch}, 触屏误触问题演示, MessageBoxButton.YesNo);if (isOk MessageBoxResult.No){if (SelectedUser ! _originUser){SelectedUser _originUser;}}}catch (Exception ex){Console.WriteLine(ex);}finally{IsRealTouch false;_originUser SelectedUser;IsCanSelectionChanged true;} });可以看到这样就能识别出是否是误触了。这里是演示在实际使用时识别到是误触就可以直接返回而不用弹窗了。问题解决了那么原因呢对于触屏操作产生鼠标事件这个是微软为了兼容性而导致的前面也说过了。至于为什么会有个触点残留在原来的位置而且点击其它地方一定次数就会触发这个问题我也没找到原因请知道的朋友不吝赐教。有两个猜测一是模态弹窗对事件有影响一是命令对事件有影响目前没想到怎么验证。另外之前说过弹窗点击是的情况下后续没有误触现象所以也有理由怀疑是从代码中改变了选中项已绑定到 DataGrid 的选中项所以会有这个问题。从代码中改变选中项又会触发行改变事件所以加了个 IsCanSelectionChanged 来避免重入当然加不加这个避免重入的都有误触现象。有点晕。 最后奉上源码地址https://gitee.com/dlgcy/DLGCY_WPFPractice/tree/Blog20211010 大家可以帮忙研究研究。
http://www.zqtcl.cn/news/467633/

相关文章:

  • 伊春网站制作怎么做视频网站赚钱吗
  • 前端网站开发邹城住房城乡建设部网站
  • 淘宝u站怎么做网站的网站建设费 科研 类
  • 代点任意广告链接网站怎样做才能让百度搜到网站产品
  • 宿迁网站搭建南宁建设局
  • app官网入口昆明排名优化
  • 新乡网站建设开发wordpress如何添加一个文章列表页
  • 中国3大做外贸的网站seo建站营销
  • 建站免费加盟高台县建设局网站
  • 网站联盟推广江门提供网站制作平台
  • 百度上面如何做网站asp源码下载
  • 婚庆网站的设计意义网站规格
  • 网站收录率嘉兴网站开发公司
  • 优秀的设计网站不备案 没版权 网站
  • 建设 互动 网站 模式网络营销模式不是孤立存在的
  • 怡梦姗网站做么上海21世纪人才网官网登录
  • 家政网站建设方案分析哈尔滨做网站找哪家好
  • 如何建设论坛网站营销宣传策划方案
  • 企业网站推广排名技术网
  • 网站建设网页设计培训学校延边网站建设
  • 自己做网站需要的技术个人简历表格下载
  • 做网站建设小程序ukidc做电影网站
  • 网站内容分析软文范例100字
  • 网站建站策划用vs做网站
  • 如何建自己的网站做农村电子商务的网站有哪些内容
  • 手机销售网站设计怎么推广软件让别人下载
  • 贵州三蒲建设工程有限公司网站莱阳网站制作
  • 外贸买家网站适合初学者模仿的网站
  • 安徽蚌埠怀远县建设局网站米卓网站建设
  • 网站框架怎么建设微信旧版本下载