65.9K
CodeProject 正在变化。 阅读更多。
Home

在 WPF 中使用资源字典

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.71/5 (62投票s)

2009年4月11日

CPOL

2分钟阅读

viewsIcon

558378

关于在 WPF 中使用资源字典的一些技巧

添加 WPF 资源字典

由于 WPF 应用程序具有丰富的媒体和图形支持,因此需要以可重用且管理良好的方式利用样式。 我们可以将样式定义在 WPF XAML 文件中,或者可以将所有有用的样式集中在一个资源字典文件中,供特定应用程序使用。 添加资源字典非常简单。 我们需要在解决方案资源管理器中选择项目或文件夹,然后右键单击并选择“添加”。 我们将获得一个名为“资源字典”的菜单项。 单击该菜单项将弹出“添加新项目”向导,并选择资源字典项目模板。 按照您的意愿重命名该项目。

AddResourceDictionary

ResouceDictionary 中,我们可以保存自定义样式、DataTemplates、ControlTemplates,甚至 BrushColorBackground 和许多其他内容的自定义定义。 但是,重要的是我们必须为每个定义分配一个键,因为它是一个 Dictionary。 或者,我们可以为样式命名。

在 XAML 中使用资源文件

在本节中,我们将了解如何将资源文件导入到用户控件、窗口或页面的 XAML 文件中。 下面提供了一个简单的代码列表作为演示。 由于我们可以为每个控件拥有一个资源字典,因此我们将其他资源文件合并到现有的资源字典中。

<Window x:Class="WPFDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary 
                  Source="Resources/MyResourceDictionary.xaml">
                </ResourceDictionary>
                <ResourceDictionary 
                  Source="Resources/OthersStyle.xaml">
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Image Source="/WPFDemo;component/Images/AddResourceDictionary.jpg"></Image>
    </Grid>
</Window>

在 C# 中使用资源文件

在某些情况下,我们需要从 C# 代码访问在项目中定义的资源字典。 如果我们已经在 XAML 中合并了资源字典,则可以使用 control.FindResource("KeyWillGoHere"); 方法轻松访问内部资源。 但是,如果我们尚未在 XAML 中合并资源,但仍然需要使用资源字典,则可以选择直接在 C# 代码中使用这些资源。 这里提供了一个简单的代码片段以便更好地理解

public partial class Window1 : Window
{
    private ResourceDictionary myresourcedictionary;
    private ResourceDictionary mystyles;

    public Window1()
    {
        InitializeComponent();
        
        myresourcedictionary = new ResourceDictionary();

        myresourcedictionary.Source = 
            new Uri("/WPFDemo;component/Resources/MyResourceDictionary.xaml", 
                UriKind.RelativeOrAbsolute);

        mystyles = new ResourceDictionary();

        mystyles.Source = new Uri("/WPFDemo;component/Resources/OthersStyle.xaml",
                UriKind.RelativeOrAbsolute);
    }

    public void ApplyStyle()
    {
        Style mybuttonstyle = mystyles["MyStyle"] as Style;
        Button mybutton = new Button();
        mybutton.Style = mybuttonstyle;
    }
}

我们使用 URI 来获取资源字典的内容。 我必须提到一件事,即在定义 URI 时,项目名称首先出现,然后是相对路径。 UriKind 选项非常重要。 如果我们没有提到 UriKind,它将无法解析 URI 并找到资源。 由于这是一个资源字典,因此我们必须使用键访问样式,就像在普通字典中一样。

摘要

在这篇简短的文章中,我们已经了解了如何将 WPF ResourceDictionary 添加到我们的应用程序中,以及如何在 XAML 和 C# 中使用资源字典。 祝你好运,编码愉快!

历史

  • 2009 年 4 月 11 日:初始版本
© . All rights reserved.