温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

WP8开发日志(4):ResourceDictionary的外联

发布时间:2020-08-10 11:27:33 来源:网络 阅读:638 作者:shengqin105 栏目:开发技术

也许,这是个简单的问题,可惜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下面,那是否工程下面所有的页面都不需要作引用操作就可以获取到相关资源呢?我还木有试过呢。

附件:http://down.51cto.com/data/2364299
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI