據瞭解,目前武漢軟體開發市場關於PC端桌面開發的技術主要有兩塊:winform和wpf。wpf是微軟既winform之後推出的一套新的桌面開發技術。採用數據驅動的方式可以輕鬆編寫出非常炫的界面。 ...
據瞭解,目前武漢軟體開發市場關於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