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

WPF自学入门(三)WPF路由事件之内置路由事件

下面先来了解一下WPF内置的路由事件和原理,然后我们来创建一个属于自己的路由事件。 1、WPF内置的路由事件 新建WPF项目,在页面上放置按钮。...调试运行,鼠标右键点击按钮,会依次弹出下列三个对话框。 ButtonMouseDown事件被触发: ? GridMouseDown事件被触发: ?...我点击的是按钮,为什么Grid和Window也会引发事件呢?...其实这就是路由事件的机制,引发的事件由源元素逐级传到上层的元素,Button—>Grid—>Window,这样就导致这几个元素都接收到了事件。(注意一定是鼠标右键,否则引发不了事件。)...看到了这个顺序区别,那么我们加入e.Handled=true的时机也要不同 PS:本人也是WPF的初学者,如有不对的地方,欢迎在评论区多多指教,学习,为了分享,为了提高。

1.6K20

WPF 非客户区的触摸和鼠标点击响应

默认在 WPF 里面是不响应非客户区的鼠标事件,但响应触摸事件 在没有喝下午茶的时候 lsj 告诉我,在项目里面在一个定制的窗口里面的非客户区用鼠标点击不了一个按钮,但是用触摸可以点击按钮。...本金鱼一开始认为这是之前修复的问题,但是作为金鱼已经不记得是怎么修了,为了让本金鱼下次遇到触摸或鼠标问题的时候可以解决,于是写了这个博客 本文将会告诉大家在 WPF 里面关于非客户区的触摸和鼠标点击响应...触摸,但不响应鼠标点击和 Pointer 触摸 如果需要在非客户区也就是窗口标题栏支持鼠标点击,那么请在按钮添加附加属性 WindowChrome.IsHitTestVisibleInChrome 为...spy++ 知道在 WPF 的标题栏点击的时候是可以收到 Windows 鼠标消息,也就是这里是 WPF 处理的 我和 lsj 说也许是之前的 WPF 框架的大佬写的时候还不知道有触摸,于是处理了鼠标事件...现在 lsj 正在看 WPF 的源代码,想要找到是如何让标题栏支持触摸但是不支持鼠标点击 在 WPF 下,可以在非客户区的触摸拖动的时候,同时触发触摸拖动和窗口拖动。

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【愚公系列】2023年11月 WPF控件专题 Page控件详解

    WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见的标准用户界面元素。...一、Page控件详解Page是WPF应用程序中的一个控件,用于将应用程序的内容分解为独立的页面。它通常用于实现导航结构,例如在框架或导航窗口中。...Page控件提供了一个基本的页面布局,可以在其中添加其他控件来组成页面。在WPF中,创建一个新的Page控件可以通过Visual Studio的模板进行。...当用户点击按钮时,我们根据按钮的Content属性来判断要加载哪个页面,然后使用Navigate方法进行页面导航。运行程序,可以看到两个页面。...在Page1页面中点击“Go to Page 2”按钮,会跳转到Page2页面。在Page2页面中点击“Go to Page 1”按钮,会跳转回到Page1页面。

    1.1K11

    WPF 按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响

    在 WPF 里面,默认标题栏的交互相对复杂,如按钮没有设置 WindowChrome.IsHitTestVisibleInChrome 属性为 True 那按钮是拿不到点击事件的。...本文来告诉大家按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响 在 WPF 中的默认交互是点击标题栏的时候,如果是双击标题栏...而如果在标题栏放一个按钮,此时按钮默认是没有收到点击的,详细请看 WPF 非客户区的触摸和鼠标点击响应 如果想要让按钮能收到点击,需要使用 WPF 非客户区的触摸和鼠标点击响应 的方法,让 WPF 的按钮加上...WindowChrome.IsHitTestVisibleInChrome 属性 此时点击按钮的时候,如果是在标题栏的地方,是让按钮收到点击。...尽管第一个按钮是覆盖整个窗口大小的,同时设置了 WindowChrome.IsHitTestVisibleInChrome 属性,但是被第二个按钮覆盖的地方,双击标题栏会让窗口全屏 因此在 WPF 中,

    1.6K30

    【炫丽】从0开始做一个WPF+Blazor对话小程序

    ,然后在内容区自己画标题栏、最小化、最大化、关闭按钮、客户区等。...默认窗体的边框,运行程序如下:看上图,点击窗体中的按钮(其实是Razor组件的按钮),但未执行按钮点击事件,且窗体消失了,这是怎么回事?...,注册了双击事件调用窗体最大化(还原)方法、鼠标按下与释放调用窗体的移动开始与结束方法;在第一个div里,其中有3个按钮,即窗体的控制按钮,调用窗体最小化、最大化(还原)、关闭方法调用;另有两个按钮,演示单击调用...消息,打开子窗体B;打开子窗体B后,再点击主窗体A的【桃心】按钮,发送了SendRandomDataMessage消息,子窗体B的第二个TabItem Header显示了消息传来的数字;点击子窗体B的【...WPF虽然相较Winform做出比较好看的UI相对容易一些,但比起Blazor,或者直接说html开发界面,还是差了一点点,更何况html的资源更多一点,尝试一下为何不可?

    8.2K60

    dotnet 日志上报的 TracerId 和 SessionId 的意义

    首先假定咱这个大的应用是一个战斗集团,不是由单个进程组成的,他将包括了 WPF 客户端,以及 .NET 客户端服务,还有后台 ASP.NET Core 的服务集群等。...当然如果我只是单个进程,那么此时使用 TracerId 和 SessionId 两个属性的作用不会很大 那么在一个由很多应用组成的战斗集团会遇到什么问题?最大的问题就是定责。...按钮点击的事件,用来上报。...由业务发起方写入,基本上都是由 Guid 组成的字符串。...例如我的 WPF 客户端,问了我的 OTA 自动更新服务说有没有更新,这是由用户点击客户端界面的更新按钮发起的。于是在用户点击按钮的逻辑里面,就生成了 Guid 作为 TracerId 记录日志。

    1K20

    WPF入门到放弃(三)| 制作串口调试助手

    一是因为我相信技术总是需要不断的总结与练习才能有所进步,二是希望帮助初学者对WPF有个初步的了解,大家一起探讨学习进步。...WPF入门到放弃(一) | 安装与创建 WPF入门到放弃(二) | 初识XAML 说明: 本文主要介绍WPF(Windows Presentation Foundation),是微软推出的一项基于windows...成品界面如下图所示: 下面来一步步介绍它是如何完成的 首先将Window的Title="MainWindow" 改成Title="串口调试助手" 下面介绍最常用的布局元素Grid:定义由列和行组成的灵活的网格区域...主要使用ColumnDefinitions(列定义)和 RowDefinitions(行定义)两个属性。...TextBox 文本框可用于显示或编辑无格式文本,是WPF最基础的文本输入控件,允许终端用户编写文本,可以是一行文字,也可以是多行。 点击运行按钮,一个串口调试助手的界面就完成了。

    1.5K30

    【炫丽】从0开始做一个WPF+Blazor对话小程序

    ,然后在内容区自己画标题栏、最小化、最大化、关闭按钮、客户区等。...默认窗体的边框,运行程序如下: 隐藏WPF默认窗体边框 看上图,点击窗体中的按钮(其实是Razor组件的按钮),但未执行按钮点击事件,且窗体消失了,这是怎么回事?...,注册了双击事件调用窗体最大化(还原)方法、鼠标按下与释放调用窗体的移动开始与结束方法; 在第一个div里,其中有3个按钮,即窗体的控制按钮,调用窗体最小化、最大化(还原)、关闭方法调用; 另有两个按钮...视图,本示例WPF窗体只是一个壳,承载BlazorWebView使用; 5.3 示例及代码说明 先看本示例效果,再给出相关代码说明: 消息通知示例 图中有三个操作: 点击主窗体A的【+】按钮,发送了...WPF虽然相较Winform做出比较好看的UI相对容易一些,但比起Blazor,或者直接说html开发界面,还是差了一点点,更何况html的资源更多一点,尝试一下为何不可?

    10.4K20

    【愚公系列】2023年11月 WPF控件专题 RepeatButton控件详解

    WPF控件可以分为两类:原生控件和自定义控件。原生控件是由Microsoft提供的内置控件,如Button、TextBox、Label、ComboBox等。这些控件都是WPF中常见的标准用户界面元素。...一、RepeatButton控件详解RepeatButton控件是一个可重复点击的按钮控件,可以用于实现类似于音量加减的功能。...在点击按钮时,会触发Click事件。我们还可以在Pressed和Released事件处理程序中处理按钮的按下和释放事件。...1.属性介绍RepeatButton控件是WPF中的一个按钮,它可以在按钮被按下后自动重复执行某个操作,直到鼠标按钮被释放。...点击RepeatButton按钮的效果是,它们会在您按住鼠标不放时重复地触发点击事件。

    32312

    C# WPF MVVM项目实战(进阶①)

    WPF UI:WPF Datagrid合并表头的思路 https://mp.weixin.qq.com/s/-x_21jOT4VAxiKhT6fgnhg , 后续有新的想法我继续会在此基础上叠加完善...="7000" //显示时间 ToolTipService.BetweenShowDelay="2000"//获取或设置两个工具提示显示之间的最大时间(第二个工具提示不经延迟即会出现)。...ToolTipService.HorizontalOffset="10"//获取或设置由 PlacementRectangle 和 PlacementTarget 属性为工具提示指定的区域的左侧偏移量。...ToolTipService.VerticalOffset="20"//获取或设置由 PlacementRectangle 和 PlacementTarget 属性为工具提示指定的区域的顶部距离。.../s/1fMiqhFJiVfkDTzTAjjcvAQ 提取码: 右下角点击再看或者转发,超过20个以后我会在留言区公布!

    2K20

    WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

    在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None"、AllowsTransparency="True" 这两个属性。...背景透明的异形窗口 如下是一个背景透明异形窗口的示例: 此窗口包含很大的圆角,还包含 DropShadowEffect 制作的阴影效果。对于非透明窗口来说,这是不可能实现的。...这两种实现的窗口之间还有一些功能上的区别: 方案 WindowChrome AllowsTransparency 点击穿透 在完全透明的部分点击依然点在自己的窗口上 在完全透明的部分点击会穿透到下面的其他窗口...然而,如果你希望在使用高性能的 WindowChrome 时也依然能点击穿透,那么你需要使用到一点点的小技巧来绕过 WPF 对 WS_EX_LAYERED 窗口样式的锁定。...请参见:WPF 制作支持点击穿透的高性能的透明背景异形窗口。

    1.7K20

    WPF 触屏事件后触发鼠标事件的问题及 DataGrid 误触问题

    触屏事件连带触发鼠标事件的问题 这个是 WPF 已知的问题,网络上也有一些讨论,但是没有一个完美的方法来解决。...所以,有一个说法是,只使用鼠标事件就行了,比如就单单使用 PreviewMouseDown 事件,或者按钮的话直接使用 Click 事件,或者使用命令(Command),这种方法理论上是可以的,但是实际情况下...这个触屏事件提升为鼠标事件的一个表现就是,触屏拖动或者点击,会在屏幕上 “残留” 鼠标,当然,是不可见的,或者表现为一个小星号。所以,从这个角度出发,产生了这样一种方法:点击后将鼠标移开。...(没有去尝试,感兴趣的朋友可以试试): 二、DataGrid 误触问题及解决方法 上一个部分介绍了去除触屏事件后连带引发鼠标事件影响的方法,也就是通过鼠标事件参数的 StylusDevice 属性来判断是否是由触屏操作引发的...选是的时候不会有误触现象,选否的时候,鼠标操作的话也正常,而如果在弹窗时通过触屏点击了否,然后在界面空白处(这里是在右侧的信息区)触屏点击几下,就会在表格上,在之前点击要切换到的那一行上产生一个鼠标事件

    2.8K10

    如何让 WPF 程序更好地适配 UI 自动化

    SemanticZoom appbar AppBar 不过从实际测试情况来看,微软自家都已经不用这两种特殊控件了,而是使用前面那些常用控件的组合来替代这两个特殊的控件。...具体来说,WPF 默认情况下有这些特点: 所有可交互的控件,其整体可被捕获,而且各个可被交互的部分也可以分别被捕获(例如日历和内部按钮,树和内部的项,滚动条和内部按钮等)。...UI 自动化测试的控件和层次结构十分诡异,甚至不可读。..., // 准确返回类型可以让 UI 自动化软件针对性地做一些自动化操作(例如按钮的点击), // 如果找不到类似的就说明是全新种类的控件,应返回 Custom。...; } } 给一个几乎都是图像组成的 ListBox 的 UI 自动化适配例子。

    50320

    dotnet 读 WPF 源代码笔记 使用 Win32 方法修改窗口的坐标和大小对窗口依赖属性的影响

    /// SWP_NOCOPYBITS:清除客户区的所有内容。如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。...适用于客户区和非客户区(包括标题栏和滚动条)和任何由于窗回移动而露出的父窗口的所有部分。如果设置了这个标志,应用程序必须明确地使窗口无效并区重画窗口的任何部分和父窗口需要重画的部分。...windowInteropHelper.Handle, IntPtr.Zero, 0, 0, (int)(Width + 10), (int)(Height + 10), SWP_NOMOVE); } 此时点击修改窗口大小的按钮...但如果此时咱点击一下最大化,那么点击修改窗口坐标按钮,是可以修改窗口坐标的,同时窗口的状态依然是最大化。...另外最大化也会影响 Left 和 Top 属性,因为在更新这两个属性之前会先判断窗口,如果是最大化的,将不会更新这两个依赖属性。

    76820

    WPF自学入门(一)WPF-XAML基本知识

    一、基本概念 1、XAML是派生自XML的可扩展应用程序标记语言(Extensible Application Markup Language)由微软创造应用在WPF,Silverlight等开发技术中...在WPF之中,XAML是很重要的一个元素,它是用来构造WPF的UI界面的,正是因为WPF有了XAML这标记语言,它才能实现把界面和逻辑分离开来的一种设计模式,逻辑程序员写后台代码,而前台的界面设计由设计人员用...对于新手来说,逻辑树可以包含类型对象,这一点和可视化树不同,可视化树只包含Dependancy子类的实例。遍历逻辑树时,要记住逻辑树的叶子可以是任何类型。...遍历可视化树可以简单的使用VisualTreeHelper和简单的递归方法。WPF提供了两个辅助类(LogicalTreeHelper and VisualTreeHelper)来操作这两棵树。...在后面具体实现项目时在来写附加事件 PS:本人也是WPF的初学者,如有不对的地方,欢迎在评论区多多指教,学习,为了分享,为了提高。

    2.6K10

    .NET Core - 解决VS2019中.net core WPF暂时无法使用Designer的临时方法

    核心思想还是借壳~ 目前.net core下的WPF项目中的XAML可视化设计器(Designer)尚不可用,后续的Visual Studio 2019 Update才会支持该部分的功能。...具体的解决方法是在同一个 Solution下创建两个项目: 用于设计WPF应用程序的.NET Framework应用程序.net Framework 项目) 用于运行WPF应用程序的.NET Core应用程序...更改 .net core WPF项目 CoreHiWPF 的Assembly Name,使得两个项目一致 右键点击 .net core WPF项目 CoreHiWPF,选择最后的Properties,...按需修改MainWindow.xaml和相应的.cs 接下来,我在MainWindow.xaml的Grid中加入了两行,一行放的是一个含有文本可换行的Label,另一行是Exit按钮。...然后在Exit按钮上加入了Click事件,在Window上加入了Loaded事件。 ? 代码改完之后,F5运行,最后的界面如下: ? 项目代码已推到github,欢迎Fork和star.

    1.6K20

    WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWPChrome)

    是个与 WPF 相关的附加属性,与模拟窗口样式没有关系。...所以基本模拟就靠前面的两个属性了。...标题栏上的三大金刚 我们发现,在以上所有方法尝试完成后,还剩下右上角的三颗按钮的背景色无法定制。如果依然采用非客户区控件覆盖的方法,这三个按钮就会被遮挡,只能自己区模拟了,那是不小的工作量。...也就是说,Win32 原生方法也许能达到 Google Chrome 的效果,但不可能达到 UWP 中的效果。 为了完全模拟 UWP,标题栏上的按钮只能自绘了。...关于自绘标题栏按钮以模拟 UWP 原生按钮,可以阅读我的另一篇文章(代码太长,还是分开了好):WPF 应用完全模拟 UWP 的标题栏按钮。

    6.7K20

    MAUI 框架开发 将 MAUI 嵌入到 WPF 控件里

    WPF 里面的 Canvas 显示出 MAUI 的 MainPage 的界面内容,同时以上的 MAUI 的 CounterButton 还加上了 OnCounterClicked 点击事件,在点击事件里面修改了按钮的文本内容...那如何在用户点击按钮时,回过来触发到 MAUI 按钮的点击逻辑呢?...这时就需要平台层主动处理交互逻辑,如以下代码,重写连接函数,监听 WPF 按钮的点击事件,将点击事件给到 MAUI 的按钮的点击 class FooButtonHandler : ButtonHandler...在 MAUI 的按钮上设置文本,将会自动同步到 WPF 的按钮,自动给 WPF 的按钮设置上文本。...点击 WPF 的按钮,就会触发回 MAUI 的按钮的点击 看到这里大家也能感受到这个工作量有庞大了吧 这还没结束,以上只是介绍了使用 WPF 作为 MAUI 的底层框架如何实现 MAUI 的按钮处理器。

    38220
    领券