武汉软件开发:一看就会的wpf入门教程

时间:2021-09-13 06:56:33

  据了解,目前武汉软件开发市场关于PC端桌面开发的技术主要有两块:winform和wpf。wpf是微软既winform之后推出的一套新的桌面开发技术。采用数据驱动的方式可以轻松编写出非常炫的界面。

武汉软件开发:一看就会的wpf入门教程

1、XAML语言是一种界面描述语言,用户界面用XAML的元素或属性来表示,WPF引擎把XAML描述的UI元素解释为相应的.NET对象,从而在桌面程序上创建相应的控件。

2、WPF编程模型是XAML标记语言和逻辑编程语言(C#)的混合,界面元素以及他们的相互关系是用XAML的节点、属性以及相互关系来描述的。

3、XAML的根元素常见的主要有2个:Window(用于桌面应用程序)、Page(Web应用程序)。不常见的:FlowDocument、Application和Grid。

4、XAML中命名空间用xmlns属性表示,并且一个XAML命名空间对应一个或多个.NET命名空间(好处是在XAML中不必写过多的命名空间)。常用的两个命名空间是:http://schemas.microsoft.com/winfx/2006/xaml/presentation(默认命名空间)和http://schemas.microsoft.com/winfx/2006/xaml(特定功能--控制XAML编译器),这两个命名空间几乎包含WPF中所有命名空间。

5、使用XmlnsDefinition特性将多个.NET命名空间合并到一个XAML命名空间:在AssemblyInfo.cs文件中

[assembly:XmlnsDefinition("http://www.motyer.cn", "Moty.Utils")]

[assembly:XmlnsDefinition("http://www.motyer.cn", "Moty.UI")]

【扩展】xmlns:x表示的含义:

xmlns:x和xmlns一样,是申明一个命名空间,区别在于xmlns申明特定属性的命名空间。比如下面的代码

<Root xmlns="http://www.motyer.cn"

xmlns:blog="http://www.motyer.cn/blog"

Author="motyer"

CreateTime="2016/12/30"

blog:Count="256"

blog:CreateTime="2016/12/30">

……………………

</Root>

在上面的代码里面,有2个属性前面都带有前缀blog,对于这类属性的命名空间就是由xmlns:blog指出的,而另外不带任何前缀的属性的命名空间是由xmlns指出的。

6、如果要在XAML里面使用自定义的类和属性,那么必须要先按如下方式引入命名空间:xmlns:custom="clr-namespace:Moty.Utlis.Codec",并且在使用时需要在属性前面加上前缀custom。

7、WPF开发采用代码分离(Code Behind)技术,一个WPF应用程序一般由2部分构成:XAML描述UI、C#处理逻辑。

8、排版类元素可以包含多个子元素,内容控件只能包含一个子元素(如:Window)。

9、相关属性表示方法:

==> 第一种方法(简洁、推荐)

<DockPanel Background="Red">...</DockPanel>

==> 第二种方法

<DockPanel>

<DockPanel.Background>Red</DockPanel.Background>

</DockPanel>

10、2类标记扩展:

①WPF标记扩展(StaticResource、DynamicResource、Binding、RelativeSource、TemplateBinding);

②XAML标记扩展(x:Type、x:Static、x:null、x:Array)

* x:Type:在XAML中取对象的类型,相当于C#里面的typeof;

* x:null:将目标属性的值设为null;

* x:Array:在XAML里面创建一个数组

<x:ArrayExtension Type="{x:Type sys:Int32}"

x:Key="myArray">

<sys:Int32>1</sys:Int32>

<sys:Int32>2</sys:Int32>

<sys:Int32>3</sys:Int32>

</x:ArrayExtension>

* x:Static:把某个对象上的属性或域的值赋给目标对象的相关属性。

11、XAML使用{}表示扩展,例如:

<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=PersonName}"/>

该例使用了2个扩展,Binding、StaticResource,并且是嵌套扩展。

(猜想:可能有一个Binding类,初始化的时候需要给定Source和Path两个属性的值。)

12、自定义扩展:新建一个类,继承MarkupExtension类,重写ProvideValue方法。

武汉蚂蹄软件服务中心主营软件项目外包,专注于提供中小型软件定制、网站建设、微信开发和APP开发等商务解决方案。联系QQ:773347113