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

编程入门 行业动态 更新时间:2024-10-19 16:40:14

WPF 使用 WindowChrome,在自定义<a href=https://www.elefans.com/category/jswz/34/1771087.html style=窗口标题栏的同时最大程度保留原生窗口样式(类似 UWP/Chrome)"/>

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

WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式。然而,Windows 上的应用就应该有 Windows 应用的样子嘛,在保证自定义的同时也能与其他窗口样式保持一致当然能最大程度保证 Windows 操作系统上的体验一致性。

本文将使用 WindowChrome 来自定义窗口样式,使其既保留原生窗口样式和交互习惯,又能够具备一定的自定义空间。


使用 Windows 原生窗口体验的应用

在自定义窗口样式的同时保证一致的 Windows 窗口风格体验的优秀应用有这些:

  • Windows 10 UWP 应用
    • 当然少不了 UWP 应用,毕竟这就是 Windows 10 窗口体验的代表
  • Google Chrome
    • 如果我不提第三方应用,你们肯定会说微软都是自己拿内部 API,拿黑科技做的
  • Windows 文件资源管理器
    • Windows 文件资源管理器也有一些自定义(例如在标题栏上放按钮,虽然实际做得很丑),不过整体来说还没 Chrome 做得精致呢


▲ Chrome 普通窗口


▲ Chrome 最大化窗口

为什么不做无边框窗口?

WPF 自定义窗口可是非常容易的,完全自定义样式、异形都不在话下。

<Window x:Class="Walterlv.Whitman.MainWindow"xmlns=""xmlns:x=""xmlns:d=""xmlns:mc=""xmlns:local="clr-namespace:Walterlv.Whitman"mc:Ignorable="d" Title="Whitman" Width="800" Height="450"WindowStyle="None" AllowsTransparency="True">
</Window>

然而,这就不贴近原生窗口体验了,有这么多事情都不好模拟:

  • 最小化、最大化、关闭按钮
    • 按钮要多大?位置在哪里?图标边距又是多少,颜色值又是什么?鼠标滑入划出的动画效果如何?
  • 窗口标题栏交互
    • 标题栏上有右键菜单,如果自己模拟,基本上这个就要自己重新实现了。
  • 窗口的位置和尺寸
    • 你需要自己实现一套窗口的拖拽调整位置功能,需要自己实现一套拖拽调整大小的功能。而自己实现的方式在触摸屏下还很容易出现失效的情况。
  • 窗口的阴影
    • 要完全模拟 Windows 10 上的窗口阴影效果实在是一件头疼的事情,因为并不知道各种阴影参数是多少;就算模拟出来,性能也是个严重的问题。
  • 窗口的边框颜色
    • 虽然窗口边框是被广为吐槽的一点,但为了保证一致的窗口体验,这也是需要模拟的;正常情况和失焦的情况颜色还不一样。
  • 第三方应用集成
    • 第三方截图应用可以毫无障碍地捕捉到标准窗口的外框范围,但如果我们没有模拟好(而是拿一个 WPF 无边框窗口模拟),那么第三方截图应用就截不准(可能会超出窗口本来的大小)。
    <

更多推荐

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

本文发布于:2024-02-25 14:11:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699236.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:窗口   自定义   样式   标题栏   类似

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!