【WPF.NET开发】WPF中的窗口

news2024/11/27 12:50:13

目录

1、窗口类

2、实现窗口

2.1 为 MSBuild 配置窗口

3、窗口生存期

3.1 打开窗口

3.2 窗口激活

3.3 关闭窗口

3.4 窗口生存期事件

4、窗口位置

4.1 最顶层窗口和 z 顺序

5、窗口大小

6、大小调整属性的优先级顺序

7、窗口状态

8、窗口外观

8.1 重设大小模式

8.2 Window style

8.3 任务栏显示

9、其他类型的窗口


用户通过窗口与 Windows Presentation Foundation (WPF) 应用程序交互。 窗口的主要用途是托管使数据可视化并使用户能够与数据交互的内容。 WPF 应用程序使用 Window
 类提供自己的窗口。 本文先介绍 
Window,然后讲述在应用程序中创建和管理窗口的基础知识。

本文使用从 C# 项目生成的 XAML。 如果使用 Visual Basic,则 XAML 看上去可能有不同。 这些差异通常出现在 x:Class 属性值上。 C# 包括项目的根命名空间,而 Visual Basic 不包括。

C# 的项目模板创建了一个 App 类型,包含在 app.xaml 文件中。 在 Visual Basic 中,该类型名为 Application,该文件名为 Application.xaml

1、窗口类

在 WPF 中,窗口由用于执行以下操作的 
Window 类封装:

  • 显示窗口。
  • 配置窗口的大小、位置和外观。
  • 托管特定于应用程序的内容。
  • 管理窗口的生存期。

下图展示了窗口的构成部分:

window-parts.png?view=netdesktop-8.0

窗口分为两个区域:非工作区和工作区。

窗口的非工作区由 WPF实现,它包括大多数窗口所共有的窗口部分,包括:

  • 标题栏 (1-5)。
  • 图标 (1)。
  • 标题 (2)。
  • 最小化 (3)、最大化 (4) 和关闭 (5) 按钮。
  • 包含菜单项的系统菜单 (6)。 单击图标 (1) 时出现。
  • 边框 (7)。

窗口的工作区是窗口的非工作区内部的区域,由开发人员用于添加特定于应用程序的内容,例如菜单栏、工具栏和控件。

  • 工作区 (8)。
  • 大小调整手柄 (9)。 这是添加到工作区 (8) 的控件。

2、实现窗口

典型窗口的实现既包括外观又包括行为,外观定义用户看到的窗口的样子,行为定义用户与之交互时窗口的运行方式。 在 WPF 中,可以使用代码或 XAML 标记实现窗口的外观和行为。

但在一般情况下,窗口的外观使用 XAML 标记实现,行为使用代码隐藏实现,如以下示例所示。

<Window x:Class="WindowsOverview.Window1"
        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:WindowsOverview"
        >

    <!-- Client area containing the content of the window -->
    
</Window>

下面的代码是 XAML 的代码隐藏。

using System.Windows;

namespace WindowsOverview
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }
}

若要使 XAML 标记文件和代码隐藏文件配合工作,需要满足以下要求:

  • 在标记中,Window 元素必须包含 x:Class 属性。 生成应用程序时,标记文件中存在 x:Class 会使 Microsoft 生成引擎 (MSBuild) 生成派生自 
    Window 的 partial 类,其名称由 x:Class 属性指定。 这要求为 XAML 架构 (xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml") 添加 XAML 命名空间声明。 生成的 partial 类实现 InitializeComponent 方法,注册事件和设置在标记中实现的属性时将调用此方法。

  • 在代码隐藏中,类必须是 partial 类、名称必须是标记中 x:Class 属性指定的相同名称,并且它必须派生自 
    Window。 这样,代码隐藏文件就与应用程序生成时为标记文件生成的 partial 类相关联。

  • 在代码隐藏中,
    Window 类必须实现调用 InitializeComponent 方法的构造函数。 InitializeComponent 由标记文件已生成的 partial 类实现,用以注册事件并设置标记中定义的属性。

使用 Visual Studio 将新的 Window
 添加到项目时,
Window 通过同时使用标记和代码隐藏实现,并且包括必要的配置来创建此处所述的标记文件和代码隐藏文件之间的关联。

进行了此配置后,可以专注于在 XAML 标记中定义窗口的外观,并可在代码隐藏中实现窗口的行为。 以下示例显示了一个窗口,该窗口中的一个按钮定义了 
Click 事件的事件处理程序。 这是在 XAML 中实现的,处理程序是在代码隐藏中实现的。

<Window x:Class="WindowsOverview.Window1"
        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:WindowsOverview"
        >

    <!-- Client area containing the content of the window -->

    <Button Click="Button_Click">Click This Button</Button>
    
</Window>

下面的代码是 XAML 的代码隐藏。

using System.Windows;

namespace WindowsOverview
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Button was clicked.");
        }
    }
}

2.1 为 MSBuild 配置窗口

实现窗口的方式决定为 MSBuild 配置窗口的方式。 对于使用 XAML 标记和代码隐藏定义的窗口:

  • XAML 标记文件配置为 MSBuild Page 项。
  • 代码隐藏文件配置为 MSBuild Compile 项。

.NET SDK 项目会自动导入正确的 Page 和 Compile 项,无需对其进行声明。 如果为 WPF 配置了项目,则会将 XAML 标记文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1291642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HeyGen推出Avatar2.0:AI视频翻译工具引领虚拟分身创作新时代

在数字创意领域迈向新的里程碑&#xff0c;HeyGen公司正式推出了Avatar2.0&#xff0c;这是一款令人惊叹的AI视频翻译工具&#xff0c;仅需短短5分钟&#xff0c;用户即可在手机上打造一个逼真的虚拟分身。HeyGen的这一最新创新标志着他们在多模态内容生成领域的持续引领地位&a…

Ubuntu18安装(重启黑屏问题)

1. F10 进入bios&#xff0c;选择u盘里的ubuntu镜像 2.进入使用ubuntu&#xff0c;下载 3.重启&#xff0c;esc 4.ubuntu 安e进入 5. nomodeset&#xff08;&#xff09; F10 保存启动 6. 7.没有网 手机usb提供网络 下载有限网卡驱动

什么牌子的开放式耳机好用?手把手教你选,小白必看!

开放式耳机大揭秘&#xff0c;小白也能秒变发烧友&#xff0c;在这个喧嚣的音乐世界&#xff0c;究竟哪个牌子的开放式耳机好用&#xff1f;戴着这个问题我会手把手教你如何挑选&#xff0c;不仅仅是推荐&#xff0c;还会详细解析各个品牌的特色&#xff0c;让你在挑选的过程中…

从 ByteHouse 网关,看如何进一步提升 OLAP 引擎性能

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 随着数字化转型的加速&#xff0c;企业面临着海量数据收集、处理和分析挑战。ClickHouse因其分析速度快、高性能的特点&#xff0c;被开发者广泛使用。 作为连接客户…

R语言手册30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

河南诗词大会规则和流程

河南省诗词大赛是一场充满诗意的盛会&#xff0c;分为小学组、中学组和社会组。流程包括四个环节&#xff1a;“大浪淘沙” 、“月宫折桂” 、“飞花令”和“诗画南阳”。 比赛前两轮为“大浪淘沙”和“月宫折桂”环节&#xff0c;所有赛手采用平板现场答题&#xff0c;时间为2…

安科瑞智慧型动态无功补偿的工业应用—— 以江苏某陶瓷生产企业配电房改造为例

安科瑞电气股份有限公司 摘 要&#xff1a;低压配电系统的无功补偿是电能质量治理的重要环节。在传统无功补偿中&#xff0c;响应速度较慢&#xff0c;补偿电流呈阶梯式&#xff0c;存在过补或欠补的现象&#xff0c;有时未必能到达理想的效果。为了解决这一问题&#xff0c;…

软件测试工程师基本要求的经验之谈

作为一位从事软件测试行业三年左右的初级测试工程师&#xff0c;下面给大家分享一些日常工作中的一些经验哈&#xff0c;专业大佬勿喷哈~ 首先&#xff0c;何为软件测试。软件测试顾名思义&#xff0c;就是测试软件系统的功能、性能&#xff0c;尽可能多的发现其中存在的问题&…

代码随想录算法训练营 ---第五十七天

今天是两道动态规划的经典题目。 第一题&#xff1a; 简介&#xff1a; 做了今天的题目我有了新的理解&#xff0c;我觉得过去我过于注重对于二维数组的理解&#xff0c;忽略了对dp数组i 和 j 的含义的理解。 动态规划五部曲&#xff1a; 1.确定dp数组的含义 本题我们将i …

MES管理系统提升车间数字化的五个关键功能模块

随着科技不断进步&#xff0c;生产管理信息系统也越来越智能化。其中&#xff0c;MES管理系统是生产管理领域中广泛应用的系统之一。通过实时数据采集、监控、分析和控制&#xff0c;MES管理系统能够给协助企业实现生产过程的可视化、标准化和优化&#xff0c;从而提高生产效率…

制作一个RISC-V的操作系统五-RISC-V汇编语言编程三

文章目录 分析code/asm/add中的makefile相关命令 算数运算指令addadd2sub 练习5-1 分析code/asm/add中的makefile makefile EXEC testSRC ${EXEC}.sGDBINIT ../gdbinitinclude ../rule.mk很明显还要去执行rule.mk rule.mk include ../../common.mk.DEFAULT_GOAL : all a…

微信小程序中生命周期钩子函数

微信小程序 App 的生命周期钩子函数有以下 7 个&#xff1a; onLaunch(options)&#xff1a;当小程序初始化完成时&#xff0c;会触发 onLaunch&#xff08;全局只触发一次&#xff09;。onShow(options)&#xff1a;当小程序启动或从后台进入前台显示时&#xff0c;会触发 on…

Numpy 实现ID3决策树

Numpy 实现ID3决策树 # 定义节点类 二叉树 class Node:def __init__(self, rootTrue, labelNone, feature_nameNone, featureNone):self.root rootself.label labelself.feature_name feature_nameself.feature featureself.tree {}self.result {label:: self.label,fea…

Python第三次练习

Python 一、如何判断一个字符串是否是另一个字符串的子串二、如何验证一个字符串中的每一个字符均在另一个字符串中出现三、如何判定一个字符串中既有数字又有字母四、做一个注册登录系统 一、如何判断一个字符串是否是另一个字符串的子串 实现代码&#xff1a; string1 inp…

Java随记

Java java保留两位小数 1、使用String.format()方法&#xff1a; public static void stringFormatdecimalFormatKeepTwoDecimalPlaces(){double number 3.1415926;String result String.format("%.2f", number);System.out.println(result);}输出&#xff1a;3…

案例054:基于微信的追星小程序

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

简单易懂:Axios 如何取消请求的两种方法

在前端开发中&#xff0c;网络请求是非常常见的操作。而有时候&#xff0c;我们可能需要在发送请求后取消它&#xff0c;比如用户在请求还未完成时离开了当前页面或者执行了其他操作&#xff0c;本文将介绍如何在使用 Axios 发送请求时取消这些请求。 基本概念 在 Axios 中&am…

拼多多商品详情API接口丨百亿补贴商品数据丨秒杀商品数据

拼多多API接口是拼多多网提供的一种应用程序接口&#xff0c;允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口&#xff0c;开发者可以开发各种应用程序&#xff0c;如店铺管理工具、数据分析工具、购物比价工具等。在本章中&#xff0c;我们将介绍拼多多API接…

大模型在企业知识库场景的落地思考

一、引言 在这个信息爆炸的时代&#xff0c;企业的知识库已不再是简单的数据堆砌&#xff0c;而是需要智能化、高效率的知识管理和利用。大模型作为AI领域的一个重要突破&#xff0c;正逐步成为企业知识库管理的强大助力。通过前面一段时间对于大模型在企业落地的深入调研和实…

创业6个月裤衩都赔掉了;2023生成式AI年度大事表;AI工程师的自我修养;LLM开发者成长计划;OpenAI LLM入门课程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f440; 黄家驹AI演唱「直到世界尽头」&#xff0c;是科技前进也是青春回望~ https://www.bilibili.com/video/BV1CG411i7MV 最近几天&#xf…