前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF 按钮 Button 的 IsEnabled 属性对 WindowChrome 的 IsHitTestVisibleInChrome 的影响

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

作者头像
林德熙
发布2020-12-21 09:43:21
1.5K0
发布2020-12-21 09:43:21
举报
文章被收录于专栏:林德熙的博客林德熙的博客

在 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” 那么此时双击将依然让窗口最大化

代码语言:javascript
复制
<Window x:Class="BeehijemwaboHaihafobe.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BeehijemwaboHaihafobe"
        mc:Ignorable="d"
        Title="MainWindow" WindowStyle="None" Height="450" Width="800">
  <WindowChrome.WindowChrome>
    <WindowChrome CaptionHeight="20" />
  </WindowChrome.WindowChrome>
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Button Grid.ColumnSpan="2" WindowChrome.IsHitTestVisibleInChrome="True" />
    <Button IsEnabled="False" />
  </Grid>
</Window>

上面代码运行的时候,将界面分为两列,此时尝试双击两边的标题栏。尽管第一个按钮是覆盖整个窗口大小的,同时设置了 WindowChrome.IsHitTestVisibleInChrome 属性,但是被第二个按钮覆盖的地方,双击标题栏会让窗口全屏

因此在 WPF 中,是否禁用标题栏的默认行为,是根据命中的元素决定的。此时在相同的容器内的其他元素,不会再被路由

本文代码放在github欢迎小伙伴访问


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/WPF-%E6%8C%89%E9%92%AE-Button-%E7%9A%84-IsEnabled-%E5%B1%9E%E6%80%A7%E5%AF%B9-WindowChrome-%E7%9A%84-IsHitTestVisibleInChrome-%E7%9A%84%E5%BD%B1%E5%93%8D.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者前往 CSDN 关注我的主页

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

无盈利,不卖课,做纯粹的技术博客

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档