「Logical resources may be of various types, such as brushes, geometries, styles, and templates.
Placing all those resources in a single file such as App.xaml hinders maintainability. A better
approach would be to separate resources of different types (or based on some other criteria) to
their own files. Still, they must be referenced somehow from within a common file such as App.
xaml so they are recognized.」app
爲了增長資源文件的可維護性,咱們應該使用ResourceDictionary對資源進行:分類、彙總。spa
如何實現呢?舉個例子3d
1.新建一個WPF Application,在Application中添加一個New Item,選擇ResourceDictionary。code
譬如,命名爲Brushes.xaml,咱們用它來存放一些筆刷。打開,咱們添加一個筆刷以下:xml
Brushes.xaml:blog
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <LinearGradientBrush EndPoint="1,0" x:Key="brush1"> <GradientStop Color="Violet" Offset="0" /> <GradientStop Color="Orange" Offset=".7" /> <GradientStop Color="Brown" Offset="1" /> </LinearGradientBrush> </ResourceDictionary>
2.在App.xaml中Merge則個Resource。
「Open App.xaml. We need to merge external resource dictionaries into the main
application dictionary.」ip
打開App.xaml,添加以下內容:ci
<Application x:Class="ManagingLogicalResources.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Brushes.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
3.這樣咱們就能夠在頁面中正常使用了。資源
<Window x:Class="ManagingLogicalResources.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <Ellipse Fill="{StaticResource brush1}"/> </Grid> </Window>
效果以下:開發
-----------------------------------
在實際開發中更經常使用的作法是:直接在使用的View內部Merge。
<Window x:Class="WPFMergedDicitonary.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Brushes.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Window.Resources> <Grid> <Ellipse Fill="{StaticResource brush1}"/> </Grid> </Window>
效果同上,以下: