此文摘自WPF程序设置指南第21章的最后,说明了多程序共享资源,摘录这里便于学习!
当你使用资源越来越多时.你可能会想要在多个应用程序之间共享资源。特别是,如果你
开发了一个自定义style的collection,以让你公司的应用程序具有独特的外观与感觉时,尤其
如此。
你想要在多个工程之间共享的资源,可以被集中在XAMI.文件中,其root element是
Resou}ceIlictior_arye每个资源都是root element的一个孩子。下面是一个可能的resource
dictionary,只有一个资源〔不过,想要有多个资源也行)。
<!-- ===============================================
MyResources1.xaml (c) 2006 by Charles Petzold
=============================================== -->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<LinearGradientBrush x:Key="brushLinear">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Pink" Offset="0" />
<GradientStop Color="Aqua" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</ResourceDictionary>
下面是另一个resource dictionary,可以包含许多资源,但是这里只包含一个资源:
<!-- ===============================================
MyResources2.xaml (c) 2006 by Charles Petzold
=============================================== -->
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<RadialGradientBrush x:Key="brushRadial">
<RadialGradientBrush.GradientStops>
<GradientStop Color="Pink" Offset="0" />
<GradientStop Color="Aqua" Offset="1" />
</RadialGradientBrush.GradientStops>
</RadialGradientBrush>
</ResourceDictionary>
你现在正在准备一个名为UseCommonResource:的工程,而且你想要使用
MyResources1.xaml和MyResources2.xaml所定义的资源。你可以让这两个文件成为
此项目的一部分,将“Build Action”设定成"Page"或"Resource"。(不过设定成Page比较
好,因为某些初步的处理会发生在编译期,将此文件从XAML转成BAML。)在此工程的“应用程序
定义文件”( application definition file〕中,你可以加上一个Resources section}语法如下面
的文件所示。
<!-- ========================================================
UseCommonResourcesApp.xaml (c) 2006 by Charles Petzold
======================================================== -->
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
StartupUri="UseCommonResourcesWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="MyResources1.xaml" />
<ResourceDictionary Source="MyResources2.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
在文件的Resources Section内,是一个ResourceDictionary element。
Resource-Dictionary定义了一个名为Mergednictionaries的property,这是其他ResourceDictipnary
对象的collection,而这些对象是根据文件名来引用的。如果你只有一个resource dictionary,
你可以从一个ResourceDictionary对象直接引用它。不需要使用ResourceDictianary.
Mergednictionaries property element。
多个resource dictionary真的会被合并(merge)如果你碰巧在多个文件中使用相同的key
那么当resource dictionary被合并时,早先出现的资源会被后来出现的相同key的资源替代。
除了可以将Resourcenictionary放在应用程序定义文件中,也可以放在某个XAML文
件的Resources section中,但是这么做的话,该资源只能被该文件使用,无法在整个应用程
序中使用。
最后,下面是Window element,它使用了定义在MyResources1.xaml与MyResources2.xaml
文件内的资源。
<!-- ===========================================================
UseCommonResourcesWindow.xaml (c) 2006 by Charles Petzold
=========================================================== -->
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="Use Common Resources"
Background="{StaticResource brushLinear}">
<Button FontSize="96pt"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Background="{StaticResource brushRadial}">
Button
</Button>
</Window>
接触像XAMI,这样的新语言,焦虑可能会伴随而来。这个语言真的定义得那么充分,让
我们不会在路上跌得鼻青脸肿吗?很重要的是,程序代码要尽量少地重复,而资源可以帮助我
们达到此目标。不只对象可以被定义一次,然后在整个应用程序中使用多次,资源也可以被存
储在它们自己的ResourceDictionary文件内,然后让多个应用程序使用相同的资源。
WPF程序设计指南第21章中资源共享说明
最新推荐文章于 2012-10-21 20:57:14 发布