如何在WPF中使用全局资源?

时间:2010-05-26 09:53:27

标签: .net wpf

我有一个WPF应用程序,我想使用一些静态资源。我创建了一个包含资源的资源库XAML文件。我还通过Properties面板在项目的Resources中添加了一个字符串。

我假设我可以将这些资源与绑定表达式一起使用:

{StaticResource ResourceName}

但是Visual Studio告诉我没有找到资源。我是否必须在我的XAML中包含某种形式的参考?我见过的例子只包括本地资源,如:

<Window.Resources>, <Page.Resources> etc

我不想在本地包含资源,因为我希望它们可用于应用程序的多个部分。

4 个答案:

答案 0 :(得分:9)

将它们放入App.xaml :)

  

在每个WPF应用程序中都有一个   App.xaml(及其相应的代码   file,App.xaml.cs或App.xaml.vb)   它作为一个全局文件   申请范围广泛的声明。您可以   使用此文件声明一个常量   整个应用程序的外观和感觉。   例如,您可以声明默认值   所有按钮的红色背景   应用

http://www.microsoft.com/emea/msdn/thepanel/en/articles/introduction_wpf.aspx

答案 1 :(得分:2)

查看“静态资源查找行为”here部分。应用程序资源字典中的任何内容(即Application.Resources)都可在全球范围内使用。每当您使用给定密钥查找资源,并且该密钥未在本地资源字典的层次结构中的任何位置使用时,将返回应用程序字典中的密钥。

要在XAML中填充应用程序的资源字典,请找到应用程序的XAML文件(通常为App.xaml)并添加Application.Resources元素。

答案 2 :(得分:2)

您可以创建全局资源字典,并在app.xaml中包含其路径

<Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/YourProject;Component/YourXamlFile.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

现在,YourXamlFile.xaml中的所有资源都将在项目中全局显示。

答案 3 :(得分:0)

在这里加上我的2美分。

我也想使用全局资源,但我使用的是自定义Application类,所以我无法将它放在App.xaml中。

我在我的根位置创建了一个Resources.xaml,然后执行了此操作:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri("/MyWpfClient;component/Resources.xaml", UriKind.Relative) });

但是请注意,Resource.xaml必须具有构建操作到页面&#39;。如果它没有找到我用作转换器的某些类型。

相关问题