您好,登錄后才能下訂單哦!
也許,這是個簡單的問題,可惜WP8的開發資料真的是少得可憐,還是折騰了半天,MSDN上面說得挺清楚,不過似乎是WPF的內容,可以參考這里:http://msdn.microsoft.com/zh-cn/library/cc903952(v=vs.95).aspx ,我在這里做一下簡單的備忘。
一般我們在PhonePage里定義樣式,是直接在PhoneApplicationPage.Resources的條目下寫的,很明了的,本頁面定義的資源只能在本頁面里使用,根據CSS的思想,這里肯定會有辦法讓我們自己去定義一堆自己的控件或內容樣式,應用里的每一個頁面都可以去調用得到它。像下面的代碼,是WP8工程每個默認頁面都帶有的調用系統樣式的例子:
FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}"
通過查看PhoneFontFamilyNormal定義,我們可以定位到一個叫DarkRed.xaml的文件,沒錯,這就是我們想要的效果,定義一個統一的樣式文件,然后在應用的隨便一個地方都可以調用得了,這個標準稱呼就叫“資源字典的外聯或合并”。
DarkRed.xaml本身就是一個很好的參考樣本,在此為基礎我們建立自己的樣式資源文件,起碼此文件上的引用信息是必須要用的,根據我上篇日志系列的例子工程,我打算將LongListSelector里的數據模板樣式放到獨立的資源文件里去,自建一個xaml的文件,Ctrl+C,Ctrl+V,像下面這個樣子:
//MySource/MyDataTemplate.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib"> <DataTemplate x:Key="TestDataItemTemplate"> <StackPanel Margin="0,0,0,0"> <TextBlock Text="{Binding Index}"/> <TextBlock Text="{Binding Name}" /> <StackPanel Height="1" Background="AliceBlue"></StackPanel> </StackPanel> </DataTemplate> <DataTemplate x:Key="TestDataItemTemplate2"> <StackPanel Margin="0,0,0,0"> <TextBlock Foreground="Red" Text="{Binding Index}"/> <TextBlock Foreground="Yellow" Text="{Binding Name}" /> <TextBlock Foreground="Green" Text="{Binding Flag}" /> <StackPanel Height="1" Background="RoyalBlue"></StackPanel> </StackPanel> </DataTemplate> </ResourceDictionary>
至于如何引用呢?資源字典是頁面資源的一部分,所以還是要下PhoneApplicationPage.Resources下面作引用的操作,像下面這個樣子:
//MainPage.xaml
<!--引用外部的資源字典文件--> <phone:PhoneApplicationPage.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="MySource/MyDataTemplate.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </phone:PhoneApplicationPage.Resources>
當然可以外聯很多個資源文件,看你自己安排,其他的代碼,一點也不須要動。最后,留個問題:如果將上面Resources里的內容放到App.xaml里的Application.Resources下面,那是否工程下面所有的頁面都不需要作引用操作就可以獲取到相關資源呢?我還木有試過呢。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。