WPF入门教程

本文是关于WPF入门的教程,介绍了XAML的基本概念和应用,包括什么是XAML,如何创建第一个WPF桌面应用程序,以及XAML名称空间的使用。通过实例展示了在Visual Studio中创建并理解XAML代码的过程,强调了UI设计与逻辑代码的分离,以及XAML在WPF中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:什么是XAML?

  XAML,英文全称Extensible Application Markup Language,即“可扩展应用程序标记语言”。这个东西就是微软开发出来抄袭(HTML+CSS+JavaScript框架的),当然了,web前端框架也有它的好处,前后端可以完美的实现分离,前端开发人员专注于界面的UI设计以及美化,后端的程序员们专注于后台逻辑代码的实现,这种UI与逻辑之间的松耦合关系无疑增添了项目上的灵活性,微软正是在这个思路的基础上,设计了XAML。说的简单点,XAML是WPF技术中专门用于设计UI的语言。

2:我第一个 WPF 桌面应用程序
下面,让我们直接撸微软的一个小例子吧。

1:首先,在你的Visual Studio中新建名为HelloWPF的Application项目。

  运行这个项目,针对XAML文件,是可以进行所见即所得的可视化设计的。你在XAML代码上做的修改,只要是合乎语法的,那么在设计器里就会立刻反映出来(有时候需要刷新一下)。如果你发现设计器里显示不出来了,那一定是XAML语句出了问题,最好想办法修正它。不然的话,在设计器里都看不到效果、只能运行起来看,这还算什么可视化编程呢?要XAML还有什么意义呢?

  在我们正式剖析代码之前,让我们牢记两件事:

1. 这个世界是一个“组合”的世界——汽车是由一个车身和四个轮子组合成的;飞机是由机翅和机身组合成的。这些组成部分,我们称之为元素(Element

2. 在XAML文件里,每写一个元素就相当于定义了一个元素所对应的.NET Framework类的实例。

  有必要强调一点:如果一个实体是由一些(同类或者不同类的)子对象组合成的,我们就称这个实体为“父元素”、称这些子对象为“子元素”,因为父元素包含着子元素,所以常把父元素称为“包含元素”、把子元素称为“被包含元素”或父元素的“内容”——我们需要注意,被包含元素并不等同于包含元素的属性(property),被包含元素只是包含元素的一个部分。  初听这句话,肯定是一头雾水,OK,让我举个两个例子。比如有一个班级,这个班由56个学生、1个老师、60张桌子、70把椅子组成,那么这些学生、老师、桌子和椅子,只是这个班级的一些“组成部分”;而这个班级的人数、班级隶属的年级、班级的编号是这个班级的属性。再比如我有一个Window,这个Window里有1个Grid,这个Grid里又包含着3个TextBox、2个Button,那么这1个Grid就是这个Window的子元素,3个TextBox和2个Button又是Grid的子元素;而Window的Name、Icon、尺寸乃至Resources都是这个Window的属性。

你可能会问,这个道理这么简单,有什么好强调的呀?

原因是这样的:对于C#的类而言,属性(property)肯定是一个对象(比如Window的Name属性,它就是一个String类型的对象),这个对象也是类实例的一个组成部分;而在对这个类进行扩展的时候(对这个类进行派生),我们新添加进来的元素(比如3个TextBox和2个Button)也是类实例的组成部分。OK,大家看到了,从现实世界抽象到编程世界来之后,它们的区别就不那么鲜明了。为了再让它们的区别“鲜明”起来,请大家记住两句话:

  • 属性对象(元素)是父元素所固有的,子元素则可由设计人员来进行增减
  • 属性对象(元素)是隶属于父类的(从父类继承而来),子元素是在设计派生类时新添加进来的

之所以在剖析代码之前讲述这些东西,是因为XAML是一种XML语言,它的语法完全是元素嵌套组合式的,而属性和子元素也都是类实例的组合体,如果不先分清楚,读代码的时候一定会感觉混乱。

 在了解了这些内容之后,我们就可以放心地读代码了。

  1. 打开MainWindow.xaml ,你会看到代码如下:
<Window x:Class="HelloWPF.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:HelloWPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        
    </Grid>
</Window>

    那么,让我们一句一句的分析这段代码。

    就像我们遇到复杂长句时先要分析它的主干一样——让我们暂时抛开花花绿绿的代码,看看这段程序的主干是什么。喔~~~这段程序的主干是如此的简单!就是一个<Window>元素里包含着一个 <Grid>元素。

<Window>
    <Grid>
        
    </Grid>
</Window>

   一个句子的主干找出来之后,句子的大意也就明白了。我们已经得到这段程序的主干了,那这段程序说的是什么呢?前面我叮嘱大家一定要记住两件事件。其中一件就是“见到元素就相当于创建实例”。我想你一定会说:这段程序就是在定义一个Window类的实例,这个实例的一个组成部分是一个Grid类的实例。

  呵呵,对于这个答案,既可以说它是对的,也可以说它是错的,为什么呢?

  请注意,Window元素的一个attributex:Class="HelloWPF.MainWindow

目录 WPF体系结构 .......................................................................................................................................................... 3 WPF应用程序管理 .................................................................................................................................................. 5 一、WPF应用程序由System.Windows.Application 类进行管理 ................................................................. 5 二、创建WPF应用程序 ................................................................................................................................. 5 三、应用程序关闭 ........................................................................................................................................... 6 四、Application 对象的事件 ........................................................................................................................... 7 五、WPF应用程序生存周期 .......................................................................................................................... 9 WPF窗体 ................................................................................................................................................................ 10 一、窗体类 ..................................................................................................................................................... 10 1、XAML文件....................................................................................................................................... 10 2、后台代码文件 ................................................................................................................................... 10 二、窗体的生存周期 ......................................................................................................................................11 1、显示窗体 ............................................................................................................................................11 2、关闭窗体 ........................................................................................................................................... 12 3、窗体的激活 ....................................................................................................................................... 12 4、窗体的生存周期 ............................................................................................................................... 12 三、其他窗体相关的属性、方法、事件 ..................................................................................................... 15 四、定义异形窗体 ......................................................................................................................................... 16 StackPanel、WrapPanel、DockPanel 容器 .......................................................................................................... 19 一、StackPanel ............................................................................................................................................... 19 1、可以使用Orientation 属性更改堆叠的顺序 ................................................................................... 19 2、设置控件的属性,调整控件的显示................................................................................................ 20 二、WrapPanel ................................................................................................................................................ 20 三、DockPanel ................................................................................................................................................ 21 Grid UniformGrid 容器 ........................................................................................................................................ 22 一、Grid .......................................................................................................................................................... 22 二、使用GridSplit分割 ................................................................................................................................ 23 三、UniformGrid ............................................................................................................................................ 25 Canvas、InkCanvas布局 ....................................................................................................................................... 27 一、Canvas ..................................................................................................................................................... 27 二、InkCanvas ................................................................................................................................................ 27 WPF对控件其类型的继承方式如下 .................................................................................................................... 29 WPF控件内容模型 ................................................................................................................................................ 32 一、ContentControl模型 ............................................................................................................................... 35 二、HeaderedContentControl模型 ................................................................................................................ 36 三、ItemsControl模型 ................................................................................................................................... 38 1、使用ItemSource 属性 ....................................................................................................................... 38 2、使用Items属性 ................................................................................................................................ 40 四、HeaderedItemsControl模型 .................................................................................................................... 42 Panel Decorator TextBlock 内容模型 .................................................................................................................. 44 一、Panel内容模型 ....................................................................................................................................... 44 本文来自网络,由大胡子制作.版权归原作者所有.如果你有 wpf 的好资料可以联系我 QQ:249872349,Email:BigBeard@126.com 二、Decorator内容模型 ................................................................................................................................ 45 三、TextBlock 模型 ........................................................................................................................................ 46 四、TextBox 模型 ........................................................................................................................................... 49 依赖项属性和路由事件 ......................................................................................................................................... 50 一、依赖项属性(Dependency Property ....................................................................................................... 50 1、依赖项属性与CLR 包装属性 ......................................................................................................... 50 2、使用由依赖项属性提供的属性功能................................................................................................ 51 3、自定义依赖项属性及重写依赖项属性 ............................................................................................ 52 二、路由事件(RoutedEvent)..................................................................................................................... 53 键盘输入、鼠标输入、焦点处理 ......................................................................................................................... 56 一、键盘类和键盘事件 ................................................................................................................................. 56 二、鼠标类和鼠标事件 ................................................................................................................................. 57 三、焦点处理 ................................................................................................................................................. 60 1、键盘焦点: ....................................................................................................................................... 60 2、逻辑焦点 ........................................................................................................................................... 61 3、键盘导航 ........................................................................................................................................... 61 4、焦点事件 ........................................................................................................................................... 61 WPF命令 ................................................................................................................................................................ 63 一、命令: ..................................................................................................................................................... 64 二、命令源 ..................................................................................................................................................... 65 三、命令目标 ................................................................................................................................................. 66 四、命令绑定 ................................................................................................................................................. 67 WPF资源 ................................................................................................................................................................ 70 一、什么是资源 ............................................................................................................................................. 70 二、资源的定义及XAML中引用 ................................................................................................................ 70 三、XAML解析资源的顺序 ......................................................................................................................... 74 四、静态资源(StaticResource)和动态资源(DynamicResource) ........................................................ 77 五、不同类型的资源 ..................................................................................................................................... 81 1、程序集资源。 ................................................................................................................................... 81 2、对象资源 ........................................................................................................................................... 82
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值