在 WPF 里面,默认标题栏的交互相对复杂,如按钮没有设置 WindowChrome.IsHitTestVisibleInChrome 属性为 True 那按钮是拿不到点击事件的。本文来告诉大家按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响
在 WPF 中的默认交互是点击标题栏的时候,如果是双击标题栏,那么将会进入最大化窗口。而如果在标题栏放一个按钮,此时按钮默认是没有收到点击的,详细请看 WPF 非客户区的触摸和鼠标点击响应
如果想要让按钮能收到点击,需要使用 WPF 非客户区的触摸和鼠标点击响应 的方法,让 WPF 的按钮加上 WindowChrome.IsHitTestVisibleInChrome 属性
此时点击按钮的时候,如果是在标题栏的地方,是让按钮收到点击。此时双击标题栏的按钮不会让窗口最大化,但如果此时的按钮设置 IsEnabled=“False” 那么此时双击将依然让窗口最大化
而有趣的是如果在按钮 A 设置了 WindowChrome.IsHitTestVisibleInChrome 属性为 True 同时 IsEnabled=“True” 然后在按钮 A 上方再放一个按钮 B 设置 IsEnabled=“False” 那么此时双击将依然让窗口最大化
上面代码运行的时候,将界面分为两列,此时尝试双击两边的标题栏。尽管第一个按钮是覆盖整个窗口大小的,同时设置了 WindowChrome.IsHitTestVisibleInChrome 属性,但是被第二个按钮覆盖的地方,双击标题栏会让窗口全屏
因此在 WPF 中,是否禁用标题栏的默认行为,是根据命中的元素决定的。此时在相同的容器内的其他元素,不会再被路由
本文代码放在github欢迎小伙伴访问
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。 欢迎转载、使用、重新发布,但务必保留文章署名 林德熙 (包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我 联系。