第七章:XAML vs. code(3)
屬性元素語法
這里有一些C#與第4章中的FramedText代碼相似。在一個(gè)語句中,它實(shí)例化一個(gè)Frame和一個(gè)Label,并將Label設(shè)置為Frame的Content屬性:
但是當(dāng)你開始在XAML中復(fù)制它時(shí),你可能會(huì)在設(shè)置Content屬性的時(shí)候變得有點(diǎn)困難:
<Frame OutlineColor="Accent"HorizontalOptions="Center"VerticalOptions="Center"Content=" what goes here? " />如何將Content屬性設(shè)置為整個(gè)Label對(duì)象?
這個(gè)問題的解決方案是XAML語法的最基本特征。 第一步是將Frame標(biāo)簽分成開始標(biāo)簽和結(jié)束標(biāo)簽:
在這些標(biāo)簽中,添加兩個(gè)由元素(Frame)和您想要設(shè)置的屬性(Content)組成的標(biāo)簽,并添加一個(gè)句點(diǎn):
<Frame OutlineColor="Accent"HorizontalOptions="Center"VerticalOptions="Center"><Frame.Content></Frame.Content> </Frame>現(xiàn)在把標(biāo)簽放在這些標(biāo)簽中:
<Frame OutlineColor="Accent"HorizontalOptions="Center"VerticalOptions="Center"><Frame.Content><Label Text="Greetings, Xamarin.Forms!" /></Frame.Content> </Frame>該語法是如何將Label設(shè)置為Frame的Content屬性。
您可能想知道這個(gè)XAML功能是否違反了XML語法規(guī)則。 它不是。 這段時(shí)間在XML中沒有特殊含義,所以Frame.Content是一個(gè)完全有效的XML標(biāo)簽。 然而,XAML強(qiáng)加了關(guān)于這些標(biāo)簽的規(guī)則:Frame.Content標(biāo)簽必須出現(xiàn)在Frame標(biāo)簽中,并且不能在Frame.Content標(biāo)簽中設(shè)置屬性。 設(shè)置為Content屬性的對(duì)象顯示為這些標(biāo)記的XML內(nèi)容。
一旦引入了這個(gè)語法,就需要一些術(shù)語。 在上面顯示的最終XAML代碼片段中:
- 框架和標(biāo)簽是用XML元素表示的C#對(duì)象。 它們被稱為對(duì)象元素。
- OutlineColor,HorizontalOptions,VerticalOptions和Text是作為XML屬性提供的C#屬性。 他們被稱為財(cái)產(chǎn)屬性。
- Frame.Content是以XML元素表示的C#屬性,因此稱為屬性元素。
屬性元素在現(xiàn)實(shí)生活中很常見。 本章和未來章節(jié)中將會(huì)看到許多示例,您很快就會(huì)發(fā)現(xiàn)屬性元素成為您使用XAML的第二本質(zhì)。 但要小心:有時(shí)開發(fā)人員必須記得太多,以至于我們忘記了基本知識(shí)。 即使在您使用XAML一段時(shí)間后,您可能會(huì)遇到這樣的情況,即似乎無法將特定對(duì)象設(shè)置為特定屬性。 解決方案通常是一個(gè)屬性元素。
您還可以對(duì)簡單的屬性使用屬性元素語法,例如:
<Frame HorizontalOptions="Center"><Frame.VerticalOptions>Center</Frame.VerticalOptions><Frame.OutlineColor>Accent</Frame.OutlineColor><Frame.Content><Label><Label.Text>Greetings, Xamarin.Forms!</Label.Text></Label></Frame.Content> </Frame>現(xiàn)在,Frame的VerticalOptions和OutlineColor屬性以及Label的Text屬性都已成為屬性元素。 這些屬性的值始終是不帶引號(hào)的屬性元素的內(nèi)容。
當(dāng)然,將這些屬性定義為屬性元素沒有多大意義。 這是不必要的,一切都很冗長。 但它的工作原理應(yīng)該如此。
讓我們進(jìn)一步:不是將HorizontalOptions設(shè)置為“Center”(對(duì)應(yīng)于靜態(tài)屬性LayoutOptions.Center),您可以將HorizontalOptions表示為屬性元素,并將其設(shè)置為LayoutOptions值并設(shè)置其各個(gè)屬性:
`
您不能將屬性設(shè)置為屬性屬性和屬性元素。 這是設(shè)置屬性兩次,這是不允許的。 請(qǐng)記住,沒有其他內(nèi)容可以出現(xiàn)在屬性元素標(biāo)簽中。 設(shè)置為屬性的值始終是這些標(biāo)記的XML內(nèi)容。
現(xiàn)在你應(yīng)該知道如何在XAML中使用StackLayout。 首先將Children屬性表示為屬性元素StackLayout.Children,然后將StackLayout的子元素作為屬性元素標(biāo)記的XML內(nèi)容。 下面是一個(gè)例子,第一個(gè)StackLayout的每個(gè)孩子都是另一個(gè)具有水平方向的StackLayout:
每個(gè)水平的StackLayout都有一個(gè)帶有顏色的BoxView和一個(gè)帶有該顏色名稱的標(biāo)簽。
當(dāng)然,這里的重復(fù)標(biāo)記看起來相當(dāng)可怕! 如果你想要顯示16種顏色怎么辦? 還是140? 一開始可能會(huì)有很多復(fù)制和粘貼成功,但如果您需要稍微改進(jìn)視覺效果,那么您的狀態(tài)會(huì)很糟糕。 在代碼中,您可以在循環(huán)中執(zhí)行此操作,但XAML沒有此功能。
當(dāng)標(biāo)記威脅過于重復(fù)時(shí),您可以隨時(shí)使用代碼。 在XAML中定義一些用戶界面而在代碼中定義一些用戶界面是非常合理的。 但是還有其他的解決方案,你會(huì)在后面的章節(jié)中看到。
總結(jié)
以上是生活随笔為你收集整理的第七章:XAML vs. code(3)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Xmind模板文档分享——生活计划(3)
- 下一篇: 电子邮件的收发及传输过程解析