UWP 開發(fā)初階 Chapter 2 - 簡單的 XAML 基礎容器與控件介紹

正文

今天帶大家了解一下XAML的一些基本容器與控件 :sunglasses:

熟悉HTML的朋友看到XAML的語法應該會很親切,因為XAML也使用tag的形式,如下(先看一下形式,不用去理解)#(稽滑)

XAML:

<Grid>
   Todo
</Grid>

<Grid/>

上面兩種形式都是正確的 :bulb:

都表示新建了一個“Grid”,而區(qū)別在于第一種形式中在兩個grid的tag中間我們還能添加其他的東西,而第二種形式我們就不能添加其他的東西了,但是我們依舊可以添加“Property”(第一種也能添加property)

?那么問題來了!什么是 property?

中文來講就是 屬性 。還是很抽象?不慌,看圖!

上面兩圖中Background、MinWidth都是所說的property。而他們的等號后面雙引號內(nèi)部就是他們的值。比如說第一幅圖內(nèi)背景顏色是藍色的,而第二幅圖背景顏色是黑色的。

XAML控件通常包含了眾多property,其實你只需要按一個空格,vs就會彈出如上面兩圖所示的右邊的一大串列表,你可以通過鍵盤上下鍵切換,回車鍵直接輸入。這一大串列表里面都是你創(chuàng)建的東西的屬性。

看到這兒你一定一臉蒙蔽說啥啥啥,沒事我就先讓你們了解一下基本語法和一些基本知識,接下來,我要帶你們真的去了解XAML啦!

  1. 打開XAML文件并編輯

    下來,我們打開上一篇創(chuàng)建的空白項目,雙擊右側Solution Explorer內(nèi)的 MainPage.xaml 文件,打開后 會出現(xiàn)如下圖所示:

介紹上圖內(nèi)已標明,這時候你發(fā)現(xiàn)文件里面已經(jīng)有了一個grid,那么grid到底是什么呢?

先別著急,我們來看看這文件里面有什么。

首先,你們會發(fā)現(xiàn)grid之外有一個Page!

Page你可以理解為頁面,vs在你創(chuàng)建XAML頁面的時候就已經(jīng)幫你創(chuàng)建了Page,然后Page里面包了一個Grid。

這時候,我們來講grid的作用

你們想,如果我們有一個文本框,然后我們放在Page里面,這是完全可以的,編譯器說:哈!你要在Page里面塞一個文本框!沒問題!但是,如果你有兩個文本框呢?或是更多呢?編譯器就迷糊了。因為你一旦直接放了多于一個的控件,編譯器就不知道你想把這些控件放哪兒了。編譯器覺得你要把兩三個控件都塞進一個Page,那我該把他們放在哪兒呢?重合?水平排布?垂直?

這時候Grid就登場了!

  1. XAML基礎容器介紹
  • Grid

Grid就像一個容器,能告訴編譯器把控件放在什么地方,Grid翻譯成中文就是框格。Grid內(nèi)可以分行,可以分列,比如把一個grid分成兩行四列,四行三列都可以,這都取決于你的需要,然后你在把相應的空間放進幾行幾列的grid內(nèi)

那么Grid該如何分行分列呢?

寫法如下圖:

上面那個紅色框框內(nèi),是分行,分成了四行。而下面是分列,分成了四列。那你們看了圖會想為什么height和width里面的東西有的是數(shù)字有的是數(shù)字加*有的還是auto。

接下來就來講講這個。

?直接寫數(shù)字,比如我直接寫了40,那就標識我告訴編譯器,這行或者這列,高或者寬40px(一種像素單位)

?直接寫auto,比如我第四行和第四列的高和寬都寫了auto,這就表示這些行高和列寬是根據(jù)里面放的空間的高度與寬度自動更改的,也就是說不用你去認為調(diào)控了。

?還有一種就是數(shù)字加 ** 表示比例,例如我上面行的定義中第一行是 1*1* 可以精簡寫作 *),而第二行是 2*,那么表示第一行和第二行的行高比例為1:2。如果分別是 3*2*,那就表示3:2,以此類推,列定義里面也是如此。

小結:如果你想要只分行,不分列,那只需要定義上面紅色方框內(nèi)的東西。分幾行就寫幾個<RowDefination/>,其中每行的高度根據(jù)你的需要而定。以此類推,分列也如此。

簡單講完基礎容器Grid,那是不是還有其他容器?

是的呢!

舉個栗子??

當你想要并排垂直放八個控件,那你會怎么操作?學個Grid,然后分成八行?怕是瘋了#(受虐滑稽)更甚,如果放10個?100個?瘋了瘋了。這時候引入另一種容器叫StackPanel!

  • StackPanel

如果你想要放八個控件進去,你只需要建立一個StackPanel,然后把控件一個個放進去,不需要分行,因為StackPanel會自動將你的控件垂直方向從上往下一個個放進去。當然StackPanel默認是垂直方向的,你也可以改為水平方向,如果是水平方向,那控件是從左向右推疊的。

代碼案例如下:

其中TextBlock就是顯示文字的控件

而Button顧名思義,就是按鈕啦!兩者具體內(nèi)容后面會提及。

預覽效果如下:

看見了吧控件乖乖的從上往下排了起來。那如果我想要水平呢?簡單!看下圖:

Stack Panel有一個property叫做Orientation,就是方向,如果你不寫那邊是默認Vertical,也就是垂直的。如果你想要水平,只要將這個property定義為Horizontal就可以啦!

還有一些基礎容器,比如RelativePanel,這個容器可以根據(jù)其他某個容器或者控件,去固定位置,比如始終在Grid的左邊,或是始終在TextBlock的上面。這個容器暫時不介紹啦當然,大家愿意的話,自己去探索探索。

  • 容器的混合使用與使用注意事項

容器是可以嵌套使用的,比如Grid里面塞一個StackPanel,Grid里面塞一個Grid,StackPanel里面塞一個StackPanel,StackPanel里面塞一個Grid,等等等等,都是可以的,舉個栗子??

實際效果如下:

講到這里,嵌套使用是沒問題的。但是注意!容器不可以并行使用。比如這樣:

你可以看到vs給我劃了一大堆波浪線,告訴我這么些有問題。這是為什么呢?其實理解起來很簡單,這就和在Page里面直接塞多個控件是一樣的,你這么一來,編譯器就混亂了,它不知道你這兩個容器到底該怎么放。如果有專業(yè)一點的話來講,就是Content已經(jīng)重復設置了,Page中只能設置一次Content(看不懂這句沒關系)

總結

這篇了兩種基本容器Grid和StackPanel,也講述了Grid的分行與分列,下篇會講述如何將控件放入特定的行和列,并會引入幾個基礎控件

謝謝大家的!

下篇見!

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容