WPF整理-使用ResourceDictionary管理Logical Resources

「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>

效果同上,以下:

相關文章
相關標籤/搜索