WPF学习笔记

news2024/9/24 1:22:47

WPF

WPF(Windows Presentation Foundation,Windows呈现基础)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。由 .NET Framework 3.0 开始引入,与 Windows Communication Foundation及 Windows Workflow Foundation并行为新一代 Windows操作系统以及 WinFX 的三个重大应用程序开发类库。

​编辑WPF

WPF是微软新一代图形系统,运行在.NET Framework 3.0及以上版本下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大改进了传统的2D界面,比如Vista中的半透明效果的窗体等都得益于WPF。 程序员在WPF的帮助下,要开发出媲美Mac程序的酷炫界面已不再是遥不可及的奢望。 WPF相对于Windows客户端的开发来说,向前跨出了巨大的一步,它提供了超丰富的.NET UI 框架,集成了矢量图形,丰富的流动文字支持(flow text support),3D视觉效果和强大无比的控件模型框架。

Windows Presentation Foundation(以前的代号为“Avalon”)是 Microsoft 用于 Windows 的统一显示子系统,它通过 WinFX 公开。它由显示引擎和托管代码框架组成。Windows Presentation Foundation 统一了 Windows 创建、显示和操作文档、媒体和用户界面 (UI) 的方式,使开发人员和设计人员可以创建更好的视觉效果、不同的用户体验。Windows Presentation Foundation 发布后,Windows XP、Windows Server 2003 和以后所有的 Windows操作系统版本都可以使用它。

WPF是一套API函数库,是Windows操作系统中一次重大变革,与早期的GDI+/GDI不同。WPF是基于DirectX引擎的,支持GPU硬件加速,在不支持硬件加速时也可以使用软件绘制。高级别的线程绘制可以提高使用者的体验。自动识别显示器分辨率并进行缩放。而Vista就是一个非常典型的例子。 

XAML

XAML(Extensible Application Markup Language,可扩展应用程序标记语言),它是微软公司为构建应用程序用户界面而创建的一种新的描述性、解析性的语言。XAML提供了一种便于扩展和定位的语法来定义和程序逻辑分离的用户界面,而这种实现方式和ASP.NET中的"代码后置"模型非常类似。XAML也可以被编译,它的优点是简化编程式上的用户创建过程,应用时要添加代码和配置等。XAML是Windows Presentation Foundation(WPF)和Universal Windows Platform(UWP)的一部分,是微软开发的一种基于XML、基于声明,用于初始化结构化值和对象的使用者介面描述语言,它具有HTML的外观,又揉合了XML语法的本质,唯一区别是XAML较XML而言是声明性可扩展的标记语言。

例如:可以使用<Button>标签设定按钮(Button)。它类似Linux平台下的glade。至于WinFX XAML Browser Application(XBAP)是用XAML作界面描述,在浏览器中执行的程式,可取代过去的ActiveX、Java Applet、Flash。XAML本质上属于一种.NET编程语言,属于通用语言运行库(Common Language Runtime,CLR),同C#、VB.NET等同。与HTML类似,特点是用来描述使用者介面。XAML的语法格式为:<Application... />,Application是必备的基本元素。XAML可以定义2D和3D物件、旋转(rotations)、动画(animations),以及各式各样的效果。XAML 是一种声明性标记语言。 应用于 .NET Core 编程模型时,XAML 简化了为 .NET Core 应用创建 UI 的过程。 你可以在声明性 XAML 标记中创建可见的 UI 元素,然后使用代码隐藏文件(这些文件通过分部类定义与标记相联接)将 UI 定义与运行时逻辑相分离。 XAML 直接以程序集中定义的一组特定后备类型表示对象的实例化。 这与大多数其他标记语言不同,后者通常是与后备类型系统没有此类直接关系的解释语言。 XAML 实现了一个工作流,通过此工作流,各方可以采用不同的工具来处理 UI 和应用的逻辑。能够与业务逻辑进行分离在WPF中,xaml就是用于设计UI的一门语言。


创建第一个WPF项目


打开Visual Studio(VS2022),新建WPF项目,此处使用Framework创建,新建之后默认打开MainWindow.xaml文件

1 - 打开Visual Studio 2022 点击创建新项目

2 - 找到WPF 应用【可选net6 或 Framework】选择点击下一步

3 - 选择对应.NET Framework框架 输入解决方案名称和项目名称后点击创建

4 - 新建项目成功

5 - F5 运行项目

简析最简单的xaml代码


在我们上述创建的第一个WPF项目中,我能能够看到创建成功之后第一眼能够看到的一个是xaml设计区一个是xaml设计预览区。其中设计区代码为

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


我们来简单分析一下这个xaml基础的文件都包含了哪些东西。

代码简析
<Window></Window>:根节点标,标签里面定义了一些属性,包括实体类、标题、尺寸;

xmlns="... ..." xmlns:x="... ..."

这种是XML-Namespace的缩写,也就是所谓的命名空间。对应的语法是xmlns[可选的缩略名]="命名空间名称"

如xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"就是引用后者然后指定对应名称。

第一行的Class告诉XAML编译器将XAML标签的编译结果与后台代码中指定的类合并,如上边所写FirstWPFDemo.MainWindow类合并。

第二行代表的声明默认映射整个 WPF 客户端/框架 XAML 命名空间

第三行声明映射单独的 XAML 命名空间,(通常)将其映射到 x: 前缀。

第四行是设计视图下的属性,可以理解为是为设计人员所出的,比如你窗体设置宽高都是400,此处的d:width=200 在设计界面预览的时候还是200但是运行时是400,这个在编译过程中是忽略不计的,也就是第九行中mc:Ignorable="d"忽略不计。

第五行定义了如何为XML解析器表达兼容性问题。Width、Height这些都属于Window标签的属性且是依赖属性分别代表了标题、宽度和高度。

<Grid>:布局容器

相关插件


【XAML STYLER FOR VISUAL STUDIO 2022】:VS一保存之后样式就变成比较统一

Winform


对于同为桌面应用程序的Winform而言,WPF中比较好的一点就是能够各干各的事儿,比如UI设计和后台逻辑能够分开去进行处理。互不影响,能给专门的设计师处理界面同时还提供了专门的IDE------Blend。

参考资料:

1. 百度百科

2. 维基百科

3.Microsoft官方文档:What is Windows Presentation Foundation - WPF .NET | Microsoft Learn

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

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

相关文章

学习STM32(6)-- STM32单片机ADCDAC的应用

1 引 言 深入了解并掌握STM32F103单片机在模拟数字转换&#xff08;ADC&#xff09;和数字模拟转换&#xff08;DAC&#xff09;应用方面的功能和操作。学习如何配置STM32F103的ADC模块&#xff0c;实现模拟信号到数字信号的精确转换&#xff1b;同时&#xff0c;探索DAC模块…

【AI学习】[2024北京智源大会]具身智能:具身智能关键技术研究:操纵、决策、导航

具身智能关键技术研究&#xff1a;操纵、决策、导航 董 豪 | 北京大学助理教授 依然是边看边做些记录 这张图的重点是在说&#xff0c;我们的大脑&#xff0c;也是不同的部分处理不同的功能。这里面有些功能&#xff0c;比如视觉、听觉理解等功能&#xff0c;LLM已经具备&…

一键浪漫的回忆:微软开源的修复工具!!【送源码】

项目介绍 “Bringing-Old-Photos-Back-to-Life”是一款由微软开发的创新软件解决方案&#xff0c;它利用人工智能技术来修复和增强老旧照片的质量。这款工具可以解决老旧照片中常见的问题&#xff0c;如褪色、低分辨率以及物理损坏&#xff08;如划痕和撕裂&#xff09;。通过采…

分析 Vue3 Effect 函数看响应式依赖收集和触发更新过程

先给一个简单的实例&#xff0c;分析依赖收集和更新的过程 let obj { name: "hefeng6500", age: 10, flag: true }const state reactive(obj);effect(() > {app.innerHTML state.name state.age })setTimeout(() > {state.age 20 }, 1000)reactive 函数只…

吴恩达:如何系统学习机器学习?

最近在知乎圆桌里看到吴恩达的回答&#xff0c;【如何系统学习机器学习&#xff1f;】颇为惊喜&#xff0c;仿佛看到了知乎刚成立时的样子&#xff0c;请各个行业大佬来分享专业知识。 该回答目前已经有三千多赞&#xff0c;评论区也相当火爆&#xff0c;一片膜拜之声。 吴恩…

java学习19VUE

VUE NPM npm的全称是Node Package Manager 中文名为Node.js包管理器&#xff0c;是一个NodeJS包管理和分发工具&#xff0c;已经成为了非官方的发布Node模块(包)的标准。NPM可以方便地从一个全球的代码库中获取并安装Node.js模块&#xff0c;这些模块可以用于构建应用程序、…

开发框架DevExpress XAF v24.2产品路线图预览——增强跨平台性

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 DevExpress XAF是一…

Python 之Scikit-learn(二) -- Scikit-learn标准化数据

在机器学习中&#xff0c;数据标准化是一项关键的预处理步骤。标准化&#xff08;Standardization&#xff09;是将数据转换为具有均值为0和标准差为1的分布。这样可以确保特征在相同的尺度上&#xff0c;有助于提升某些机器学习算法的性能和稳定性。 Scikit-learn提供了一个简…

一篇教会搭建ELK日志分析平台

日志分析的概述 日志分析是运维工程师解决系统故障&#xff0c;发现问题的主要手段日志主要包括系统日志、应用程序日志和安全日志系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因经常分析日志可以了解服务器的负荷&#xff0c;性…

Date类型的字段序列化成JSON字符串

我们发现收到的响应结果里面有一个参数为&#xff1a; 我们收到的时间字符串格式是由JSON序列化框架来决定的。 spring将JAVA数据类型的序列和反序列化为JSON字符串是依赖jackson(com.fasterxml.jackson.core:jackson-core)库来实现的。 Date类型的字段在序列化成JSON字符串时…

【人工智能】人工智能与机器学习的相关介绍

文章目录 人工智能的发展历程人工智能与机器学习关系图谱数据处理机器学习ML和深度学习DL的区别人工智能按照学习方式划分监督学习算法无监督学习算法总结 人工智能的发展历程 重要的时间点了解一下&#xff1a; 早在1950年人工智能就已经开始兴起 1997年deep blue战胜了人类国…

天津美术学院2024级专升本新生开学报道须知

天津美术学院2024级新生入学须知 亲爱的新同学&#xff1a; 祝贺你成为天津美术学院的新成员&#xff0c;开启新的求学历程&#xff01;为方便新生入学&#xff0c;现将有关事宜通知如下&#xff1a; 一、报到安排 1.报到时间&#xff1a;2024年9月6日上午8&#xff1a;30—…

MYSQL的引擎、清空数据的两种方式

目录 1.MYSQL引擎介绍 1.1MySQL的引擎作用&#xff1a; 1.2 MySQL的3类引擎 1.3 MyISAM和InnoDB的区别 1.4设定引擎 2. 清空数据有两种不同的方式 2.1 区别 1.MYSQL引擎介绍 MySQL有多种引擎&#xff0c;能执行create table、select等命令&#xff0c;在数据量不多时…

二十九、MongoDB(1)

&#x1f33b;&#x1f33b; 目录 一、MongoDB简介1.1 什么是 MongoDB1.2 MongoDB特点1.3 MongoDB 体系结构 二、下载与安装2.1 MongoDB下载2.2 在Linux 上的安装2.2.1 安装前的准备2.2.2 开始安装2.2.3 测试软链接启动 2.3 在windows上的安装 三、基本增删改查操作3.1 选择或创…

lvs防火墙mark标记解决调度问题

实验环境是在之前部署DR模式集群的基础上做的&#xff0c;参考如下 部署DR模式集群 以http和https为例&#xff0c;当我们在webserver中同时开放80和443端口&#xff0c;那么默认控制是分开轮询的&#xff0c;就会出现了一个轮询错乱的问题&#xff1a; 当第一次访问80被轮询…

浅谈基础的图算法——Tarjan求强联通分量算法(c++)

文章目录 强联通分量SCC概念例子有向图的DFS树代码例题讲解[POI2008] BLO-Blockade题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 思路AC代码 【模板】割点&#xff08;割顶&#xff09;题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示…

【论文分享】测量城市夜间活力及其与城市空间结构的关系:一种数据驱动的方法

近年来&#xff0c;夜间活力作为反映城市经济和生活质量的重要指标受到关注。本次我们给大家带来一篇SCI论文的全文翻译。该论文采用了数据驱动的方法来测量夜间活力&#xff0c;并探索了其与城市空间结构的关系。该论文派生的洞见可以帮助制定空间策略&#xff0c;以增强夜间活…

微信小程序 - 自定义底部菜单栏

微信小程序底部菜单栏是可以通过自定义来实现的。主要涉及&#xff1a;新建组件、编写组件代码、设置样式、配置导航栏、在页面中引用。自定义底部导航栏可以创建出符合项目设计需求效果&#xff0c;实现个性化的页面切换功能。 如下图效果&#xff0c;为比较常见的中间突出半圆…

2-58 基于matlab的图像处理 GUI 程序

基于matlab的图像处理 GUI 程序&#xff0c;功能包括裁剪、 旋转和翻转图像。 更改曝光、 对比度和饱和度&#xff0c; 黑白、 灰度等常见处理效果。程序已调通&#xff0c;可直接运行。 2-58 图像处理 GUI 程序 - 小红书 (xiaohongshu.com)

同享人力资源管理系统-TXEHR V15 hdlUploadFile.ashx 文件上传致RCE漏洞复现

0x01 产品简介 同享人力资源管理系统(TXEHR V15)是一款专为现代企业设计的人力资源管理软件解决方案,旨在通过先进的信息化手段提升企业人力资源管理的效率与水平。该系统集成了组织人事、考勤管理、薪资核算、招聘配置、培训发展、绩效管理等核心模块,并提供了灵活的配置…