【问题标题】:How do I use global resources in WPF?如何在 WPF 中使用全局资源?
【发布时间】:2010-05-26 09:53:27
【问题描述】:

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

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

{StaticResource ResourceName}

但 Visual Studio 告诉我找不到资源。我是否必须在我的 XAML 中包含某种形式的引用?我看到的例子只包括本地资源如:

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

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

【问题讨论】:

    标签: .net wpf


    【解决方案1】:

    把它们放在 App.xaml 中:)

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

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

    【讨论】:

    • 在我的项目中,它默认命名为 Application.xaml。这是一个很好的答案,但我不能让我的 ResourceLibrary 中的样式在全球范围内可用吗?
    【解决方案2】:

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

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

    现在 YourXamlFile.xaml 中的所有资源都将在您的项目中全局可见。

    【讨论】:

      【解决方案3】:

      查看“静态资源查找行为”here 部分。应用程序资源字典(即Application.Resources)中的任何内容都可以全局使用。每当您使用给定键查找资源时,如果该键未在本地资源字典层次结构中的任何位置使用,则将返回应用程序字典中的那个。

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

      【讨论】:

      • 我可以理解查找行为是如何到达此 Application.Resources 区域的,但我将如何使用在项目中设置的资源。例如。右键单击项目文件,单击属性,转到资源。我是说里面的资源。不包含在我的 Application.Resources 中,我的资源库 xaml 文件中也不包含。
      • 所以我用过.. 这解决了其中一个问题允许我在我的外部资源字典中使用样式。尽管如此,仍然在实际项目资源上苦苦挣扎。
      • 抱歉,我没有注意到您正在尝试使用项目资源。项目资源和资源字典实际上是两个不同的东西。如果您有(例如)作为项目资源的图像,您可以通过&lt;Image x:Key="SomeKey" Source="URI_of_resource"/&gt; 将其放入资源字典中。但并不是每个 WPF 类都有一个可以从项目资源中加载它的 Source 属性。
      • 那么我的字符串资源呢。把它放在项目资源中是不是一个坏主意。我应该把它直接放在资源字典里吗?因为我不知道该怎么做。 Silverlight 业务应用程序将使用 .resx 文件中的资源。 wpf 中的项目资源文件也是 .resx,所以我知道您可以从中使用 StaticResource。我只是看不出怎么做。
      • 哦,如果您使用的是 VS 资源编辑器,请确保您已将资源的访问修饰符设置为 Public。然后,您可以使用 {x:Static local:Properties.Resources.MyString} 通过 XAML 中的标记来获取它们。
      【解决方案4】:

      只是在这里添加我的 2 美分。

      我也想使用全局资源,但是我使用的是自定义的Application类,所以不能直接放在App.xaml中。

      我在根位置创建了一个 Resources.xaml,然后这样做:

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

      但请注意,Resource.xaml 必须具有“页面”的构建操作。当它没有找到我用作转换器的某些类型时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-09
        • 1970-01-01
        • 2010-12-23
        • 2018-12-02
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        相关资源
        最近更新 更多