首页 > 其他分享 >【XAML】WindowChrome的使用心得

【XAML】WindowChrome的使用心得

时间:2022-11-10 03:22:06浏览次数:78  
标签:GlassFrameThickness NonClientFrameEdges XAML 边框 WindowChrome 矩形 心得 属性

参考:https://blog.csdn.net/WPwalter/article/details/81121829

 

Windows结构

标准窗口由两个重叠的矩形组成。 外部矩形(灰色)是 非工作区,内部矩形(白色)是 工作区

 

 

灰色矩形:提供 标题按钮 (最小化、最大化和关闭) 、窗口边框、调整大小和移动行为、阴影效果、应用程序图标和标题以及系统菜单。

白色矩形:提供 应用程序的内容,并由应用程序绘制和管理

 

WindowChrome

当Windows窗体控件,添加WindowChrome.WindowChrome附加属性时候,白色的矩形(WindowChrome)将独立出来,覆盖到灰色矩形上,灰色矩形会被遮盖(没有消失,还存在),WindowChrome将覆盖整个窗体.。

 

 

 

ResizeBorderThickness属性

向窗口内部扩展拖动缩放 区域

<Window x:Class="WpfApp2.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"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <WindowChrome.WindowChrome>
        <WindowChrome ResizeBorderThickness="100"></WindowChrome>
    </WindowChrome.WindowChrome>
    <Grid Background="Transparent" MouseDown="UIElement_OnMouseDown">
        <Grid Margin="100" Background="White" />
        <Button Width="100" Height="100" Command="Undo" />
    </Grid>
</Window>

效果如下:

 

 CornerRadius属性

不能使用该属性来设置圆角,因为会出现锯齿。


GlassFrameThickness 属性

控制外层矩形的边框 大小。

 

 

 

 特别注意:可定制区域中顶部是包含那 1 像素的边距的,但其他三边不包含。

<WindowChrome.WindowChrome>
    <WindowChrome GlassFrameThickness="0 32 0 0" NonClientFrameEdges="Left,Bottom,Right" />
</WindowChrome.WindowChrome>
 

在官方文档 WindowChrome.GlassFrameCompleteThickness Property (System.Windows.Shell) 中有说,如果指定 GlassFrameThickness 值为 -1,那么可以做到整个窗口都遮挡,但实际上全遮挡的效果也是不对劲的,就像下面这样:

 

GlassFrameThickness 为 -1

不止边框颜色不见了,连右上角的三个按钮的位置都跟原生不同,这个窗口的位置不贴边。

显然,GlassFrameThickness 属性我们不能指定为 -1。也不能指定为 0,你可以试试,会发现连阴影都不见了,这更不是我们想要的效果。

 

 

 

那我们指定为其他正数呢?

 

显然,没有一个符合我们的要求。但好在我们还有一个属性可以尝试 —— NonClientFrameEdges。官方文档 WindowChrome.NonClientFrameEdges Property (System.Windows.Shell) 对此的解释是:即指定哪一边不属于客户区。

 

 

 

NonClientFrameEdge属性

 即指定哪一边不属于客户区。

 

可以NonClientFrameEdges设置取消 边框。如下代码:

<WindowChrome.WindowChrome>
    <WindowChrome NonClientFrameEdges="Left,Bottom,Right" />
</WindowChrome.WindowChrome>

效果如下:

 

 

标签:GlassFrameThickness,NonClientFrameEdges,XAML,边框,WindowChrome,矩形,心得,属性
From: https://www.cnblogs.com/cdaniu/p/16875714.html

相关文章

  • 【XAML】附加属性的xmal写法
    附加属性的xmal写法案例一<Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinitionWidth="23*"/></Grid.C......
  • frp 使用心得 亲测
    涉及一共三种设备:中转服务器运行frps受控服务器运行frpc操作终端运行ssh原理及步骤1.中转服务器运行frps开启运行frps服务后,开放frps监听端口(7000),接收frps的......
  • 【XAML】WPF 的 ElementName 在 ContextMenu 中无法绑定成功?试试使用 x:Reference!
    原文:https://blog.walterlv.com/post/fix-wpf-binding-issues-in-context-menu.html在Binding中使用ElementName司空见惯,没见它出过什么事儿。不过当你预见ContextMe......
  • 测速工具使用心得体会
    测速工具使用心得体会 导语:之前写过一个测速小工具,使用的是speedtest-cli提供的api方法,当然除了这个还有其他的测速工具,今天就这个测速工具来说一下使用体验和感受。......
  • java多线程生产者消费者线程并发协作测试心得
    图11-17生产者消费者示意图产品classChicken{intid;publicChicken(intid){this.id=id;}}缓冲区(装产品)classContainer{//定......
  • 数据库设计心得——高校招生录取系统
    数据库设计心得——高校招生录取系统前言在软件工程导论项目课程中,我们负责的项目是高校招生录取系统并对其展开了数据库设计。我们通过PowerDesigner完成了本项目的数据......
  • 第十二章学习心得
    12.1块设备I/O缓冲区I/O缓冲的基本原理文件系统使用一系列I/O缓冲区作为块设备的缓存内存。块设备将信息存储在固定大小的块中,每个块都有自己的地址。对操作系统来说,块......
  • 数据库设计心得-树脂666队
    1.项目简介与背景当今时代智能手机的多功能化与便携性,使许多智能机用户习惯于将重要个人隐私信息储存于智能手机内。然而现代智能手机的密保系统较为简陋,在某些特殊情况下......
  • 数据库设计心得——强者如云,使命必达
        小组成员:刘楠、罗钰、沈煜、卢小柯、叶宸宇    对于数据库的设计,要在能够实现业务需求的前提下,对表进行一定的拆分,使数据库中的表能够符合范式要求。......
  • JavaWeb 学习心得体会
    javaweb学习心得时光转瞬即逝,一个学期的javaweb课程完美结束了。我学到了很多知识,例如:Web应用的基本概念与系统架构,JSP编程技术及WebJDBC数据库开发技术等等......