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