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