当前位置: 首页 > news >正文

WPF中Window的外观实现及常用属性

文章目录

  • 1. 概要
  • 2. Window的外观
    • 2.1 Window的外观组成
    • 2.2 Window的实现
    • 2.3 Window外观配置
    • 2.4 Window 的其他常用属性
      • 1. AllowsTransparency
  • 2. WindowStartupLocation
  • 3. ShowInTaskbar
  • 4. ShowActivated
  • 5. SizeToContent
  • 6. Topmost
  • 7. WindowStyle


1. 概要

和 Android 类似, WPF中也有很多内置的 UI组件, 且比Android的内置组件还要丰富. 如:
Button, Lable, TextBox, Menu, ListBox等等.
同样类似的还有, Android中可以使用 Activity, Fragment 放置这些 UI组件, 在WPF中 可以使用 Window , Page 放置UI组件. 用户通过Window 与 APP进行交互.

2. Window的外观

用户通过windows 与WPF 应用程序交互. 在WPF中 , windows 由 Window类封装. 该类支持:
创建和显示窗口
建立所有者/所拥有窗口的关系(Owner)
配置窗口的外观
对窗口生存期进行跟踪并与之交互

2.1 Window的外观组成

下图是 Window的基本组成:
在这里插入图片描述

Window 分为两个区域: 非工作区(Non-Client Area) 和 工作区(Client Area).
其中的 非工作区 是由 WPF 实现的, 包括 大多数 Window 共有的部分, 包括:

Border : 边框
Title : 标题
Icon : 图标
Minimize, Maximize, Restore Button: 最小化, 最大化, 还原 按钮
Close Button : 关闭按钮
System Menu : 系统菜单
Resize Grip : 调整大小拖动块

工作区 是 非工作区内部的区域, 由开发人员自己决定显示内容.

2.2 Window的实现

类似于 Android的 Activity 一般由 Activity 子类 + XML 布局, WPF 中的 Window 也一般由 Window的子类 + XAML 布局文件组成.
XAML中实现一般的外观配置:

<Window x:Class="WindowDemo.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:WindowDemo"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid></Grid>
</Window>

在 Window的子类中实现一些逻辑处理:

namespace WindowDemo {/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window {public MainWindow() {InitializeComponent();}}
}

2.3 Window外观配置

上述的 XAML 代码中 Grid 及包裹的部分为工作区域. Window 的外观配置如下

Border

BorderBrush="Aqua" //边框颜色
BorderThickness="20" //边框宽度

Title 和 Icon

Title="MainWindow"
Icon="App.png"Minimize, Maximize, Restore Button, Resize Grip
ResizeMode="xxx" // 控制可变大小ResizeMode="CanMinimize" // 可最小化 不可最大化
ResizeMode="CanResize" // 可最大化 可最小化
ResizeMode="CanResizeWithGrip" // 可用 ResizeGrip 调整大小, 同时也可最大最小化
ResizeMode="NoResize" //不可调整大小

System Menu
ContextMenu=“xxx”
代码调整如下:

<Window x:Class="WindowDemo.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:WindowDemo"mc:Ignorable="d"BorderBrush="Red" BorderThickness="3"ResizeMode="NoResize"Title="Home" Icon="App.png"Height="450" Width="800"><Grid></Grid>
</Window>

运行效果如下:
在这里插入图片描述

从上图可见, Icon 控制着 标题栏的图标 和 任务栏的图标.
上图是 ResizeMode=“NoResize” 的效果, 其他不同的 ResizeMode 效果图如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果不设置 ResizeMode 则默认和 CanResize 效果一致.

2.4 Window 的其他常用属性

1. AllowsTransparency

含义: 是否允许工作区域背景为透明, 此属性要求不适用WPF自己的WindowStyle, 必须将WindowStyle设置为None, 否则会抛出 InvalidOperationException异常.
此属性作用在于如果 工作区域小于 Window时, 中间区域是否允许透明. 例如工作区域设置圆角:

<Window x:Class="WindowDemo.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:WindowDemo"mc:Ignorable="d"WindowStartupLocation="CenterScreen"BorderBrush="Red" BorderThickness="3"WindowStyle="None"ResizeMode="CanResize"Title="Home" Icon="App.png"Height="450" Width="800"><Border CornerRadius="50" Background="Aqua"></Border>
</Window>

上述代码没有设置 AllowsTransparency, 运行效果如下:
在这里插入图片描述

设置AllowsTransparency="True"以后, 顶部的一个边 会消失.
在这里插入图片描述

四角的白色为 Window的 Background设置的颜色. 如果想去掉白色, 则需要设置 Window 的 Background 为 透明, 即: Background=“Transparent”, 此时从四角是可以看到下一层的Window内容.
在这里插入图片描述

2. WindowStartupLocation

Window启动时的位置, 可选值为:

CenterScreen : 在屏幕的中心
CenterOwner : 在Owner Window 的中心
Manual : 窗口根据其 Left 和 Top 属性值定位。 如果未指定 Left 或 Top 属性,则其值由 Windows 决定。

下图为 CenterScreen的效果:
在这里插入图片描述

3. ShowInTaskbar

该属性控制是否在任务栏显示图标, 如果设置为 False 则不会在 任务栏看到图标, 如果这时候最小化了Window ,则会在左下角显示一个小的控制条, 如下图:
在这里插入图片描述

点击还原按钮则可还原窗口.

4. ShowActivated

该值指示在第一次显示窗口时,窗口是否处于激活状态, 如果设置为 False, 效果如下:
在这里插入图片描述

注意上图的标题栏背景的颜色是 未激活状态的 颜色.

5. SizeToContent

含义: 设置窗口是否自动调整大小. 其可选值为:

Height : 根据高度调整
Width : 根据宽度调整
WidthAndHeight: 同时调整宽度和高度
Manual : 不调整

设置为 True 时, 如果工作区的实际大小没有Window 大小, 则会自动调整.
例如, 布局代码如下:

<Window x:Class="WindowDemo.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:WindowDemo"mc:Ignorable="d"WindowStartupLocation="CenterScreen"BorderBrush="Red" BorderThickness="3"WindowStyle="None"AllowsTransparency="True"Background="Transparent"ResizeMode="CanResize"Title="Home" Icon="App.png"Height="450" Width="800"><Border CornerRadius="50" Background="Aqua"Width="300" Height="300"></Border>
</Window>

此时没有设置 SizeToContent , 默认为 Manual 即 不调整大小.
在这里插入图片描述

SizeToContent的其他的值效果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. Topmost

含义: 该值设置窗口是否出现在 Z 顺序的最顶层
Topmost 属性设置为 true 的窗口将显示在所有其 Topmos t属性设置为 false的窗口之上。
在将 Topmost 属性设置为 true的窗口组中,当前激活的窗口是最顶部的窗口。

7. WindowStyle

设置 Window的风格, 类似于 Android Activity 的 theme设置. 其可选值有:

None : 无Title bar区域
SingleBorderWindow : 默认值, Title bar 包含 icon, title,及最大化最小化关闭按钮
ThreeDBorderWindow : 3D边框风格
ToolWindow : 无最大化最小化及Icon, 只有关闭按钮和Title

四种的效果如下:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

相关文章:

WPF中Window的外观实现及常用属性

文章目录 1. 概要2. Window的外观2.1 Window的外观组成2.2 Window的实现2.3 Window外观配置2.4 Window 的其他常用属性1. AllowsTransparency 2. WindowStartupLocation3. ShowInTaskbar4. ShowActivated5. SizeToContent6. Topmost7. WindowStyle 1. 概要 和 Android 类似, W…...

(有代码示例)Vue 或 JavaScript中使用全局通信的3种方式

在 Vue 或 JavaScript 应用中&#xff0c;可以使用以下库来实现全局事件通信&#xff1a; Vue.js 中的 EventBus&#xff1a; 在 Vue.js 中&#xff0c;可以使用 EventBus 来实现全局事件通信。EventBus 是一个 Vue 实例&#xff0c;用于在组件之间传递事件。你可以使用 $on、…...

MAB规范(1):概览介绍

前言 MATLAB的MAAB&#xff08;MathWorks Automotive Advisory Board&#xff09;建模规范是一套由MathWorks主导的建模指南&#xff0c;旨在提高基于Simulink和Stateflow进行建模的代码质量、可读性、可维护性和可重用性。这些规范最初是由汽车行业的主要厂商共同制定的&…...

基于振弦采集仪的土木工程安全监测技术研究

基于振弦采集仪的土木工程安全监测技术研究 随着土木工程的发展&#xff0c;安全监测成为了非常重要的一部分。土木工程的安全监测旨在及早发现结构的变形、位移、振动等异常情况&#xff0c;以便及时采取措施进行修复或加固&#xff0c;从而保障工程的安全运行。振弦采集仪作…...

这个高考作文满分的极客,想和你聊聊新媒体写作

计育韬 曾为上海市高考作文满分考生 微信官方 SVG AttributeName 开发者 新榜 500 强运营人 复旦大学青年智库讲师 浙江传媒学院客座导师 上海团市委新媒体顾问 上海市金山区青联副主席 文案能力&#xff0c;从来就不是一蹴而就的。今天&#xff0c;来和大家聊聊当年我的…...

AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.05.25-2024.05.31

文章目录&#xff5e; 1.Empowering Visual Creativity: A Vision-Language Assistant to Image Editing Recommendations2.Bootstrap3D: Improving 3D Content Creation with Synthetic Data3.Video-MME: The First-Ever Comprehensive Evaluation Benchmark of Multi-modal L…...

如何通过Python SMTP配置示例发附件邮件?

Python SMTP配置的步骤&#xff1f;SMTP服务器的优缺点有哪些&#xff1f; 当我们需要发送包含附件的邮件时&#xff0c;自动化的解决方案显得尤为重要。Python提供了SMTP库&#xff0c;使我们能够轻松配置并发送带有附件的邮件。AokSend将通过一个示例来展示如何操作&#xf…...

amd64

MD64&#xff0c;或"x64"&#xff0c;是一种64位元的电脑处理器架构。它是基于现有32位元的x86架构&#xff0c;由AMD公司所开发&#xff0c;应用AMD64指令集的自家产品有Athlon(速龙) 64、Athlon 64 FX、Athlon 64 X2、Turion(炫龙) 64、Opteron(皓龙)、Sempron(闪龙…...

2024如何优化SEO?

在2024年的今天&#xff0c;要问我会如何优化seo&#xff0c;我会专注于几个关键的方面。首先&#xff0c;随着AI内容生成技术的发展&#xff0c;我会利用这些工具来帮助创建或优化我的网站内容&#xff0c;但是&#xff0c;随着谷歌3月份的算法更新&#xff0c;纯粹的ai内容可…...

【NoSQL数据库】Redis命令、持久化、主从复制

Redis命令、持久化、主从复制 redis配置 Redis命令、持久化、主从复制Redis数据类型redis数据库常用命令redis多数据库常用命令1、多数据库间切换2、多数据库间移动数据3、清除数据库内数据 key命令1、keys 命令2、判断键值是否存在exists3、删除当前数据库的指定key del4、获取…...

使用Django JWT实现身份验证

文章目录 安装依赖配置Django设置创建API生成和验证Token总结与展望 在现代Web应用程序中&#xff0c;安全性和身份验证是至关重要的。JSON Web Token&#xff08;JWT&#xff09;是一种流行的身份验证方法&#xff0c;它允许在客户端和服务器之间安全地传输信息。Django是一个…...

MT2084 检测敌人

思路&#xff1a; 1. 以装置为中心->以敌人为中心。 以敌人为中心&#xff0c;r为半径做圆&#xff0c;与x轴交于a,b点&#xff0c;则在[a,b]之间的装置都能覆盖此敌人。 每个敌人都有[a,b]区间&#xff0c;则此题转化为&#xff1a;有多少个装置能覆盖到这些[a,b]区间。…...

支持向量机、随机森林、K最近邻和逻辑回归-九五小庞

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;、随机森林&#xff08;Random Forest&#xff09;、K最近邻&#xff08;K-Nearest Neighbors, KNN&#xff09;和逻辑回归&#xff08;Logistic Regression&#xff09;是机器学习和统计学习中常用的分类算法。…...

MySQL—多表查询—多表关系介绍

一、引言 提到查询&#xff0c;我们想到之前学习的单表查询&#xff08;DQL语句&#xff09;。而这一章节部分的博客我们将要去学习和了解多表查询。 对于多表查询&#xff0c;主要从以下7个方面进行学习。 &#xff08;1&#xff09;第一部分&#xff1a;介绍 1、多表关系 2、…...

Vue基础篇--table的封装

1、 在components文件夹中新建一个ITable的vue文件 <template><div class"tl-rl"><template :table"table"><el-tablev-loading"table.loading":show-summary"table.hasShowSummary":summary-method"table…...

mysql中optimizer trace的作用

大家好。对于MySQL 5.6以及之前的版本来说&#xff0c;查询优化器就像是一个黑盒子一样&#xff0c;我们只能通过EXPLAIN语句查看到最后 优化器决定使用的执行计划&#xff0c;却无法知道它为什么做这个决策。于是在MySQL5.6以及之后的版本中&#xff0c;MySQL新增了一个optimi…...

实习面试题(答案自敲)、

1、为什么要重写equals方法&#xff0c;为什么重写了equals方法后&#xff0c;就必须重写hashcode方法&#xff0c;为什么要有hashcode方法&#xff0c;你能介绍一下hashcode方法吗&#xff1f; equals方法默认是比较内存地址&#xff1b;为了实现内容比较&#xff0c;我们需要…...

二叉树讲解

目录 前言 二叉树的遍历 层序遍历 队列的代码 queuepush和queuepushbujia的区别 判断二叉树是否是完全二叉树 前序 中序 后序 功能展示 创建二叉树 初始化 销毁 简易功能介绍 二叉树节点个数 二叉树叶子节点个数 二叉树第k层节点个数 二叉树查找值为x的节点 判…...

Unity DOTS技术(五)Archetype,Chunk,NativeArray

文章目录 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype创建1.创建实体2.创建并添加组件3.批量创建 三.多线程数组NativeArray 本次介绍的内容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一个空间,ECS系统会将相同类型的实体放在Chunk中.当一个Chunk…...

算法学习笔记(7.1)-贪心算法(分数背包问题)

##问题描述 给定 &#x1d45b; 个物品&#xff0c;第 &#x1d456; 个物品的重量为 &#x1d464;&#x1d454;&#x1d461;[&#x1d456;−1]、价值为 &#x1d463;&#x1d44e;&#x1d459;[&#x1d456;−1] &#xff0c;和一个容量为 &#x1d450;&#x1d44e;&…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

Linux中INADDR_ANY详解

在Linux网络编程中&#xff0c;INADDR_ANY 是一个特殊的IPv4地址常量&#xff08;定义在 <netinet/in.h> 头文件中&#xff09;&#xff0c;用于表示绑定到所有可用网络接口的地址。它是服务器程序中的常见用法&#xff0c;允许套接字监听所有本地IP地址上的连接请求。 关…...

【2D与3D SLAM中的扫描匹配算法全面解析】

引言 扫描匹配(Scan Matching)是同步定位与地图构建(SLAM)系统中的核心组件&#xff0c;它通过对齐连续的传感器观测数据来估计机器人的运动。本文将深入探讨2D和3D SLAM中的各种扫描匹配算法&#xff0c;包括数学原理、实现细节以及实际应用中的性能对比&#xff0c;特别关注…...

【仿生机器人】刀剑神域——爱丽丝苏醒计划,需求文档

仿生机器人"爱丽丝"系统架构设计需求文档 一、硬件基础 已完成头部和颈部硬件搭建 25个舵机驱动表情系统 颈部旋转功能 眼部摄像头&#xff08;视觉输入&#xff09; 麦克风阵列&#xff08;听觉输入&#xff09; 颈部发声装置&#xff08;语音输出&#xff09…...