WPF基础知识学习笔记(一)XAML基础
掌握了C#和C++的程序員學(xué)習(xí)WPF的時(shí)候,首先遇到的麻煩就是XAML(實(shí)際上,很長(zhǎng)一段時(shí)間以后,我發(fā)現(xiàn)XAML還是軟肋)。
XAML語(yǔ)言和傳統(tǒng)的C#和C++編程語(yǔ)言完全不同,這種不同是根植于兩種語(yǔ)言的基礎(chǔ)的,特別是在C++程序員看來,每次看到那一大串<>就有點(diǎn)暈;另外,XAML語(yǔ)言有一個(gè)很麻煩的地方,那就是容易看懂,但是很難記住,對(duì)于初學(xué)者來說,很多東西幾乎就是直接機(jī)械記憶,比如點(diǎn)擊按鈕的響應(yīng)函數(shù)要用這樣的形式來寫<Button Click="button_click1"/>,而button_click1函數(shù)則是放在了XAML對(duì)應(yīng)的cs文件中。上帝保佑,M$一向擅長(zhǎng)的用戶體驗(yàn)幫了大忙,豐富的輸入提示大大減輕了程序員的記憶負(fù)擔(dān)。不過,很多內(nèi)容還是需要你“見多識(shí)廣”,換句話說,沒辦法一口吃個(gè)胖子,很多內(nèi)容在于積累。
閑言少敘,回到XAML語(yǔ)言中,今天就簡(jiǎn)單記錄一下最基礎(chǔ)的部分:XAML中的標(biāo)記擴(kuò)展,事件處理器,命名空間,注釋。
1.標(biāo)記擴(kuò)展
簡(jiǎn)單而言就是用“{}”來封裝一堆屬性的賦值。比如
<TextBox Text="{Binding ElementName=slider1, Path=Value, Mode=OneWay}" Margin="5">
相當(dāng)于
<TextBox Margin="5">
<TextBox.Text>
<Binding ElementName="slider1" Path="Value" Mode="OneWay"/>
</TextBox.Text>
</TextBox>
請(qǐng)注意:在{}中賦值沒有"",編譯器會(huì)把{}中的內(nèi)容直接解析成相應(yīng)的對(duì)象,對(duì)象的數(shù)據(jù)類型名是緊鄰左{的字符串。
標(biāo)記語(yǔ)言可以嵌套,例如Text=“{Binding Source={StaticResource myDataSource}, Path=PersonName}”;標(biāo)記語(yǔ)言有一些讓新入門的使用者頭痛的簡(jiǎn)寫語(yǔ)法,比如“{Binding Value, ……}”和“{Binding Path=Value, ……}”是等價(jià)的,“{StaticResource myString}”和“{StaticResource ResourceKey=myString,……}”是等價(jià)的,前者叫做“固定位置參數(shù)(Positional Parameter)”,后者成為“具名參數(shù)(Named Parameters)”,固定位置參數(shù)實(shí)際上就是標(biāo)記擴(kuò)展類構(gòu)造器的參數(shù),其位置由構(gòu)造器參數(shù)列表決定;標(biāo)記擴(kuò)展類的類名均以Extension為后綴,在XAML中使用的時(shí)候一般都省略不寫,比如Text="{x:Static……}"就等價(jià)于Text=“{x:StaticExtension……}”(這個(gè)也就是知道就行了,誰(shuí)沒事還特地加上Extension?)。
個(gè)人認(rèn)為標(biāo)記語(yǔ)言寫起來很簡(jiǎn)潔,理解起來很麻煩,使用起來必須“熟能生巧”,換言之,記住就好了。
?
2.事件處理器
.NET事件處理機(jī)制里面,如果要處理指定對(duì)象的事件,可以為對(duì)象的某個(gè)事件指定一個(gè)能與該事件匹配的成員函數(shù),這個(gè)函數(shù)就被稱為“事件處理器”(Event Handler)。WPF支持同樣的時(shí)間處理機(jī)制,允許使用XAML語(yǔ)言指定對(duì)象事件的處理函數(shù),簡(jiǎn)單而言,就是形如<ClassName EventName="EventHandleName">,其中EventName就是對(duì)象ClassName的“事件性屬性”,當(dāng)我們?yōu)椤笆录詫傩浴辟x值的時(shí)候,XAML編輯器就會(huì)自動(dòng)為我們生成相應(yīng)的事件處理器(也就是一個(gè)C#寫的函數(shù))。一個(gè)典型的應(yīng)用就是button的click事件,形如<Button x:Name="button1" Click="button1_Click" />,Visual Studio .NET編輯器有很棒的輔助功能,能夠自動(dòng)生成對(duì)應(yīng)的函數(shù)的定義,該函數(shù)(本例中是名為button1_click的函數(shù))會(huì)自動(dòng)出現(xiàn)在XAML文件對(duì)應(yīng)的.cs文件中,形如
private void button1_Click(object sender, RoutedEventArgs e)
{
}
這樣就生成了一個(gè)事件處理器了,在這個(gè)方法里面添加你的代碼響應(yīng)對(duì)應(yīng)的事件吧。?
除了在.cs中生成對(duì)應(yīng)的C#代碼,也可以把C#代碼搬到xaml文件中,使用x:Code標(biāo)簽和<![CDATA[……]]>即可,比如上面的例子就可以改寫如下:
<x:Code>
<![CDATA[
private void button1_Click(object sender, RoutedEventArgs e)
{
}
]]>
</x:Code>
?
3.命名空間
熟悉C#的估計(jì)沒有不知道這個(gè)的吧?XAML也有命名空間,概念和C#中的一樣,用法如下:
xmlns:映射名=“clr-namespace:類庫(kù)中名稱空間的名字;assembly=類庫(kù)文件名”
很眼熟吧,還記得在什么地方看到過?沒錯(cuò),在所有的XAML文件的開頭就是這些東西。
有人會(huì)覺得有問題:明明我看到的是“http://schemas.microsoft.com/winfx/2006/xaml/presentation”之類的東西啊。其實(shí)這個(gè)是XAML解析器的硬性編碼(hard-coding),意思就是只要看到這些固定的字符,就將一系列的命名空間包含進(jìn)來。所以不要被這個(gè)東西迷惑了,更不要把這這些代碼放到瀏覽器的地址欄中嘗試打開網(wǎng)頁(yè)s。
?
4.注釋
?<!-- 我是被注釋的內(nèi)容 -->
這個(gè)不多說了,幾點(diǎn)注意:只能出現(xiàn)在標(biāo)簽的內(nèi)容區(qū)域,即只能出現(xiàn)在開始標(biāo)簽和結(jié)束標(biāo)簽之間;不能注釋標(biāo)簽的Attribut;不能嵌套。
?
轉(zhuǎn)載于:https://www.cnblogs.com/lengjunming/archive/2012/02/08/2272363.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的WPF基础知识学习笔记(一)XAML基础的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雷鸟发布 AR 眼镜 Air Plus:
- 下一篇: iQOO Pad官宣:搭载天玑9000+