【WPF学习笔记(一)】WPF应用程序的组成及Window类介绍

WPF应用程序的组成及Window类介绍

    • WPF应用程序的组成及Window类介绍
    • 前言
    • 正文
    • 1、WPF介绍
      • 1.1 什么是WPF
      • 1.2 WPF的特点
      • 1.3 WPF的控件分类
    • 2、XAML介绍
      • 2.1 XAML的定义
      • 2.2 XAML的特点
      • 2.3 XAML的命名空间
    • 3、WPF应用程序组成
      • 3.1 App.config
      • 3.2 App.xaml
      • 3.3 App.xaml.cs
      • 3.4 MainWindow.xaml
      • 3.5 MainWindow.xaml.cs
    • 4、Window类介绍
      • 4.1 标题 Title
      • 4.2 大小 Height、Width
      • 4.3 窗口是否具有任务栏按钮 ShowInTaskbar
      • 4.4 窗口首次出现位置 WindowStartupLocation
      • 4.5 窗口显示状态 WindowState
      • 4.6 是否设置为最顶层 Topmost
      • 4.7 设置窗体图标 Icon
      • 4.8 窗口的加载事件 Loaded

WPF应用程序的组成及Window类介绍

前言

WPF(Windows Presentation Foundation)作为微软推出的新一代图形呈现系统,为Windows 应用程序的开发带来了革命性的变化。它以其强大的界面设计能力和灵活的编程模型,成为了现代 Windows 桌面应用开发的首选框架。而 XAML(Extensible Application Markup Language),作为 WPF 的核心标记语言,使得界面的定义与业务逻辑的分离成为可能,极大地提高了开发效率和代码的可维护性。

本文将首先简要介绍 WPF 的基本概念及其优势,带领读者走进这个强大的图形呈现世界。接着,我们将深入探讨 XAML 的语法和用法,了解它是如何与 WPF 相互协作,共同构建出丰富多彩的用户界面。最后,我们将详细解析 WPF 应用程序的组成结构,特别是 Window 类的功能与应用,帮助读者更好地理解并掌握 WPF 应用程序的开发流程和关键技术。

通过阅读本文,相信会对 WPF 和 XAML 有更深入的了解,并能够在实际开发中灵活运用它们,创造出令人满意的 Windows 桌面应用程序。

正文

1、WPF介绍

1.1 什么是WPF

WPF (Windows Presentation Foundation),Windows 呈现基础,是基于Windows 的用户界面框架;.net framework3.0及以上版本的一部分,统一的编程模型、语言和框架,做到了界面设计与后端开发分离,支持多媒体、制作动画。

1.2 WPF的特点

  • 必须运行在.net framework 3.0及以上版本 ;
  • 呈现效果不受分辨率的影响,会自动识别显示器的分辨率而进行缩放;
  • 支持DirectX 3D技术,3D界面;
  • 可以做出更炫酷的界面;
  • 提供了.net UI框架,集成了矢量图形、流动文字支持、3D视觉效果和控件模型框架;
  • UI 与 业务逻辑彻底分离,UI:XAML语言进行描述,WPF引擎解释为对应的.NET对象;
  • 用户体验,部署方式的升级
  • 运行环境:XP、server2003及以后的Windows操作系统版本;
  • 任何一种.net语言:C# 、VB.net 都可以进行开发;
  • WPF 是数据来驱动 UI 的,数据是WPF的核心,处于主动地位,UI 从属于数据并表达数据; WinForm 是数据驱动;

1.3 WPF的控件分类

  • 布局控件 Panel;
  • 内容控件 ContentControl:只能容纳一个控件或布局控件;
  • 带标题的内容控件 :内容控件可以设置标题Header ,父类:HeaderedContentControl;
  • 条目控件 ItemControl:可以显示一列数据,数据类型一般相同;
  • 带标题的条目控件:条目控件可以设置标题Header ,父类:HeaderedItemControl;
  • 特殊内容控件:常用控件 TextBox、PasswordBox、TextBlock、Image等
  • 第三方WPF控件;

2、XAML介绍

2.1 XAML的定义

为构建应用程序用户界面而创建的一种新的“可扩展的应用程序标记语言”,提供了一种便于扩展和定位的语法来定义和程序业务扩及分离的用户界面

2.2 XAML的特点

  • 定义应用程序的界面元素;
  • 显示声明WPF资源(样式、模板、动画等);
  • 可扩展性(UI控件);

2.3 XAML的命名空间

XAML 与 .NET 程序语言一样,也是通过命名空间有效组织 XAML 内部的相关元素类

在这里插入图片描述

如果应用时,不带前缀,就来自于默认的命名空间;否则,就来自于带前缀的命名空间

命名空间的引用语法:xmlns:[前缀名]="命名空间描述"
自定义类或程序集映射语法:xmlns:[必选前缀]="clr-namespace:[命名空间];assembly=[程序集名称]"

注意:一个 XAML 文件至少要有两个命名空间:

  • 默认命名空间;
  • 带x前缀的命名空间;

3、WPF应用程序组成

在这里插入图片描述

3.1 App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /></startup>
</configuration>

App.config :配置文件,包含 .NETFramework 的版本信息等;可以设置与应用程序相关的信息,比如与数据库的连接字符串的设置 connectionStrings,与系统相关的信息 appSettings 等;

  <connectionStrings></connectionStrings><appSettings></appSettings>

3.2 App.xaml

<Application x:Class="WpfTest.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfTest"StartupUri="MainWindow.xaml"><Application.Resources></Application.Resources>
</Application>

App.xaml :设置应用程序起始文件,系统级的资源;

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

  1. x:Class="WpfTest.App" : 指定 XAML 文件所对应的后代代码文件的类;
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    :默认命名空间;
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" : 和编译相关的
    CLR 命名空间;
  4. StartupUri="MainWindow.xaml">:指定应用程序的起始文件;
  5. Application.Resources:定义整个WPF应用程序的相关资源;

例如,在项目目录下创建 Users 文件夹,并创建窗口文件 UserWindow.xaml,通过修改 App.xaml 文件设置应用程序起始文件

  1. 创建 Users 文件夹;
    在这里插入图片描述

  2. 创建 UserWindow.xaml 窗口;
    在这里插入图片描述

  3. 改写 App.xaml 文件的 StartupUri;

    <Application x:Class="WpfTest.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfTest"StartupUri="Users/UserWindow.xaml"><Application.Resources></Application.Resources>
    </Application>
    

    在这里插入图片描述
    注意:是这种写法 "Users/UserWindow.xaml" 而不是 "Users.UserWindow.xaml"

  4. 运行应用程序;
    在这里插入图片描述

3.3 App.xaml.cs

App.xaml.cs :App.xaml 文件的后台类文件;

3.4 MainWindow.xaml

MainWindow.xaml :窗口文件,WPF应用程序界面与XAML设计文件;

3.5 MainWindow.xaml.cs

MainWindow.xaml.cs :MainWindow.xaml 文件的后台代码文件

4、Window类介绍

Window 类的父类:System.Windows

Window 是 ContentControl 内容控件,只能承载一个 Content;创建时默认的 Content 是 Grid ( 网格 行和列 布局控件)

4.1 标题 Title

Title="MainWindow"

4.2 大小 Height、Width

Height="450" Width="800"

4.3 窗口是否具有任务栏按钮 ShowInTaskbar

ShowInTaskbar="True"
  • True:显示任务栏按钮;
  • False:不显示任务栏按钮;

4.4 窗口首次出现位置 WindowStartupLocation

WindowStartupLocation="CenterScreen"
  • CenterOwner:
  • CenterScreen:屏幕中间
  • Manual:默认位置

4.5 窗口显示状态 WindowState

WindowState="Maximized"
  • Maximized:最大化
  • Minimized:最小化
  • Normal:原有尺寸

4.6 是否设置为最顶层 Topmost

 Topmost="True"
  • True:窗口设置为最顶层
  • False:窗口不设置为最顶层

4.7 设置窗体图标 Icon

Icon="imgs/icon.ico"

必须是 ico 文件
在这里插入图片描述
在这里插入图片描述

4.8 窗口的加载事件 Loaded

Loaded="Window_Loaded"

会在 cs 文件中自动生成 Window_Loaded 方法

        private void Window_Loaded(object sender, RoutedEventArgs e){}

还有其他的响应事件如:Closing、MouseBoubleClick、MouseLeftButtonClick、MouseLeftButtonUp、MouseRightButtonClick、MouseLeftButtonUp 等

在这里插入图片描述

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

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

相关文章

【配置】IT-Tools部署

github地址 docker运行如下&#xff0c;记得打卡端口 docker run -d --name it-tools --restart unless-stopped -p 9090:80 corentinth/it-tools:latestip:9090查看&#xff0c;很香大部分工具都有

【C++】CentOS环境搭建-安装CATCH2

【C】CentOS环境搭建-安装CATCH2 1.克隆Catch2仓库2. 进入Catch2目录3. 创建一个构建目录4. 使用CMake生成构建系统&#xff08;以及可能的编译&#xff09;5.安装Catch2&#xff08;可选&#xff0c;根据你的需求&#xff09; 1.克隆Catch2仓库 git clone https://github.com…

Secnet-智能路由系统 actpt_5g.data 信息泄露漏洞复现

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司&#xff08;简称“安网通信”&#xff09;的无线AP管理系统。 0x02 漏洞概述 Secnet-智能路由系统 actpt_5g.data 接口存在信息泄露漏洞&#xff0c;未经身份验证的远程攻击者可以利用此漏洞获取系统账户…

【Java难点】多线程-高级

悲观锁和乐观锁 悲观锁 synchronized关键字和Lock的实现类都是悲观锁。 它很悲观&#xff0c;认为自己在使用数据的时候一定有别的线程来修改数据&#xff0c;因此在获取数据的时候会一不做二不休的先加锁&#xff0c;确保数据不会被别的线程修改。 适合写操作多的场景&…

sipeed 的 MaixCam UART操作

发现问题 根据sipeed MaixCam官方文档 使用MaixVision会报错。 正确的接线 1&#xff0c;usb转ttl的RX和TX与sipeed MaixCam官方赠送的usb转接头反向连接&#xff0c;GND互相连接。 2&#xff0c;再用一根tpyc-c为其供电。 连接WiFi路由器 MaixCam液晶屏输入WiFi名称和密…

【Nginx】如何在 Nginx 中阻止来自特定国家的 IP 地址访问

文章目录 前言一、准备工作二、查看 Nginx 服务器都拥有哪些模块2.1 先查看本地nginx是否有ngx_http_geoip2模块2.2 安装nginx并配置ngx_http_geoip2模块2.2.1下载所需版本的nginx到服务器2.2.2 先安装所需依赖2.2.3 解压文件2.2.4 下载ngx_http_geoip2模块2.2.5 编译安装nginx…

视频批量剪辑指南:一键合并视频并添加背景音乐,高效便捷

在数字化时代&#xff0c;视频剪辑已经成为了一项常见且重要的技能。无论是制作家庭影片、工作展示还是社交媒体内容&#xff0c;掌握高效的视频剪辑技巧都能极大地提升我们的工作效率和创作质量。本文将为您介绍云炫AI智剪中高效的视频批量剪辑方法&#xff0c;让您能够一键合…

(Java)心得:LeetCode——15.三数之和

一、原题 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。…

Java集合框架之LinkedHashSet详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

QX---mini51单片机学习---(6)独立键盘

目录 1键盘简绍 2按键的工作原理 3键盘类型 4独立键盘与矩阵键盘的特点 5本节相关原理图 6按键特性 7实践 1键盘简绍 2按键的工作原理 内部使用轻触按键&#xff0c;常态按下按键触点才闭合 3键盘类型 编码键盘与非编码键盘 4独立键盘与矩阵键盘的特点 5本节相关原理…

Python框架Django入门教程

Django 是一个使用 Python 编程语言开发的、免费且开源的 Web 应用框架。它遵循 "DRY&#xff08;Dont Repeat Yourself&#xff09;" 原则&#xff0c;旨在简化创建功能丰富的、高效率的 Web 网站。Django 提供了模型-视图-控制器&#xff08;MVC&#xff09;架构的…

Ubuntu安装库 版本问题,错误E: Unable to correct problems, you have held broken packages.

一、问题描述&#xff1a; Ubuntu系统指令安装 : sudo apt install -y build-essential提示&#xff1a; Reading package lists... Done Building dependency tree... Done Reading state information... Done Some packages could not be installed. This may mean that y…

Prompt|Kimi高阶技巧,99%的人都不知道

大家好&#xff0c;我是无界生长。 今天分享一条咒语&#xff0c;轻松让Kimi帮你生成流程图&#xff0c;学会了的话&#xff0c;点赞收藏起来吧&#xff01; 效果展示 我们演示一下让kimi帮忙绘制 关注微信公众号“无界生长”的流程图&#xff0c;最终效果图如下所示 效果还不…

Java线程池:当核心线程数为 0 时,任务来了的执行流程

先说结论&#xff1a;创建一个临时线程直接执行 ThreadPoolExecutor.excute() public void execute(Runnable command) {if (command null)throw new NullPointerException();int c ctl.get();if (workerCountOf(c) < corePoolSize) {if (addWorker(command, true)) retu…

滑动窗口篇: 长度最小子数组|无重复字符最长字串

目录 1、滑动窗口算法 1.1 核心概念 1.2 基本步骤 1.3 应用场景 1.4 优势 2. leetcode 209 长度最小子数组 暴力解题思路&#xff1a; 滑动窗口思路&#xff1a; 3、无重复字符的最长子串 暴力解题思路&#xff1a; 滑动窗口思路&#xff1a; 1、滑动窗口算法 滑动…

while 习题

while 结构 习题 1.计算1到100所有整数和 2.提示用户输入一个小于100的整数&#xff0c;并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和、奇数和 echo -e \n 可以实现换行 4.用户输入密码&#xff0c;脚本判断密码是否正确&#xff0c;正确密码为123456&am…

基于Laravel 10 + Vue(scui) + MySQL的快速开发的后台管理系统

​ 系统介绍 ​基于Laravel 10 Vue(scui) MySQL的快速开发的后台管理系统 版权申明 禁止将本产品用于含诈骗、赌博、色情、木马、病毒等违法违规业务使用。 代码仓库 gitee地址&#xff1a; 基础版本 内置模块 用户管理&#xff1a;用于维护管理系统的用户&#xff0c…

笔记---DFS,深度优先搜索

深度优先搜索乃是注重深度&#xff0c;会把一条路径优先全部搜完然后再去回溯&#xff0c;再去搜其他路径 连通性模型 与BFS中的Flood Fill相似 AcWing.1112.迷宫 一天Extense在森林里探险的时候不小心走入了一个迷宫&#xff0c;迷宫可以看成是由 n∗n 的格点组成&#xff…

Python GraphQL服务器实现库之tartiflette使用详解

概要 Tartiflette是一个为Python编写的GraphQL服务器实现,它建立在现代异步编程库如asyncio之上,提供了高性能的GraphQL执行环境。Tartiflette专注于提供最佳的开发者体验,支持最新的GraphQL特性。 安装 安装Tartiflette相对简单,但需要依赖于一些系统级的库。 首先,需…

css定位+精灵图

一、定位 在CSS中&#xff0c;定位&#xff08;Positioning&#xff09;是一种布局技术&#xff0c;用于控制HTML元素在页面上的确切位置。CSS提供了几种不同的定位方案&#xff0c;每种方案都有其特定的用途和行为。以下是CSS中几种主要的定位方法&#xff1a; 静态定位&…