問題
當我們在進行宣告 XAML 個控制項標記屬性的時候,希望能夠擁有 CSS 這樣特性的功能,也就是可以把許多共同屬性的設定值,例如,顏色設定,集中定義在某個地方,這樣,就可以在 XAML 內的各個控制項參考這個顏色宣告。如此,當要變更這些參考到的控制項的顏色,就可以直接修改這個宣告顏色的地方進行修改,但是,要怎麼做到這樣的功能呢?
解答
要了要簡化與集中管理 XAML 中各控制項的屬性設定,您可以在
ContentPage
內的 Resources
屬性內,定義 ResourceDictionary
,在 ResourceDictionary
裡面,您可以透過 XAML 標記來宣告產生一些物件,讓整個頁面可以相關控制項與版面控制可以參考這個物件。
在底下的範例中,我們在
ResourceDictionary
內,宣告了一個 lSize
的物件,它的型態為 x:Double
(也就是 .NET 裡面的 double 型別),並且設定其值為 30。另外,宣告另外一個物件為 lTest
,它的型態為 x:String
,設定這個物件的值為 "我是 Xamarin.Forms"。
所以,只要在宣告
ResourceDictionary
節點之下的任何子節點,都可透過 StaticResource
這個延伸標記宣告方法,參考之前宣告的物件;例如,當要指定 Label
控制項的 FontSize
這個屬性值,就可以使用 {StaticResource lSize}
這樣的用法,指定這個 Label
控制項的 FontSize
屬性值為 30。<ContentPage.Resources>
<ResourceDictionary>
<x:Double x:Key="lSize">30</x:Double>
<x:String x:Key="lText">我是 Xamarin.Forms</x:String>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<Grid>
<Label Text="{StaticResource lText}"
Grid.Row="0" Grid.Column="0"
FontSize="{StaticResource lSize}"
VerticalOptions="Center"
HorizontalOptions="Center" />
</Grid>
</ContentPage.Content>