WPF学习笔记

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 XPWindows 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

  • 21
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Adorner是WPF中一种特殊的视觉元素,可以用于在其他元素上添加装饰或者附加功能。Adorner通常用于实现在用户界面上的一些特殊效果,比如鼠标悬停提示、错误提示、操作提示等。 Adorner需要继承自Adorner类,并在构造函数中调用基类的构造函数,并将需要装饰的元素作为参数传递进去。Adorner类中有一个AdornedElement属性,用于获取被装饰的元素。 Adorner类中有一个OnRender方法,用于绘制Adorner的外观。在OnRender方法中可以使用DrawingContext来绘制Adorner的外观,也可以使用VisualBrush来填充Adorner的内容。 Adorner的使用方法: 1. 创建一个Adorner类,继承自Adorner类,并在构造函数中调用基类的构造函数,并将需要装饰的元素作为参数传递进去。 2. 重写Adorner类的OnRender方法,用于绘制Adorner的外观。 3. 在需要装饰的元素上调用AdornerLayer.GetAdornerLayer方法获取AdornerLayer对象。 4. 调用AdornerLayer的Add方法,将Adorner添加到AdornerLayer中。 下面是一个简单的例子: ```csharp public class MyAdorner : Adorner { public MyAdorner(UIElement adornedElement) : base(adornedElement) { } protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); // 绘制Adorner的外观 drawingContext.DrawEllipse(Brushes.Red, null, new Point(AdornedElement.RenderSize.Width / 2, AdornedElement.RenderSize.Height / 2), AdornedElement.RenderSize.Width / 2, AdornedElement.RenderSize.Height / 2); } } // 在需要装饰的元素上添加Adorner var adornedElement = new Button { Content = "Click me!" }; var adornerLayer = AdornerLayer.GetAdornerLayer(adornedElement); var myAdorner = new MyAdorner(adornedElement); adornerLayer.Add(myAdorner); ``` 这个例子中,我们创建了一个MyAdorner类,继承自Adorner类,并重写了OnRender方法,在OnRender方法中绘制了一个红色的圆形。然后我们创建了一个Button元素,并将其作为参数传递给MyAdorner的构造函数,创建了一个AdornerLayer对象,并调用Add方法将MyAdorner添加到AdornerLayer中,从而实现了在Button元素上添加了一个红色的圆形装饰器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆〇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值