WPF:在代码隐藏中引用应用程序范围的资源

Posted

技术标签:

【中文标题】WPF:在代码隐藏中引用应用程序范围的资源【英文标题】:WPF: Referencing app-wide resources in code-behind 【发布时间】:2011-01-13 05:55:47 【问题描述】:

我制作了自己的自定义转换器,它给定一个字符串返回一个Brush。现在我可以返回常量画笔,例如Brushes.Red 等,但我真的很想使用我在应用程序范围的资源中定义的自己的颜色。

如何从我自己的自定义转换器类中引用应用程序范围的资源?我会使用FindResource,但正如我所说,这是来自我自己的转换器类,而不是窗口或控件。

【问题讨论】:

docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/… 【参考方案1】:

如果这些是在您的应用程序中定义的,您可以使用Application.Current.FindResource() 按名称查找它们。

【讨论】:

TryFindResource() 根据this answer 可能是更好的解决方案。【参考方案2】:

除了 Reed 的回答之外,如果您的资源字典是独立的 XAML 文件,您需要确保它(如 Reed 所说)“在您的应用程序上定义”。

App.xaml

<Application x:Class="WpfApplication10.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 Source="Dictionary1.xaml" />
    </Application.Resources>
</Application>

Dictionary1.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBlock x:Key="k_foo" Text="FOO" />
</ResourceDictionary>

此字典 XAML 文件中的 Build Action 可以设置为 Page。它应该与 App.xaml 文件位于同一目录中。

【讨论】:

以上是关于WPF:在代码隐藏中引用应用程序范围的资源的主要内容,如果未能解决你的问题,请参考以下文章

WPF如何获取和设置应用程序范围的资源

WPF创建单独资源库并在应用中引用

WPF获取和设置应用程序范围的资源

WPF如何在C#代码中引用资源字典中的样式?

WPF 在控件上淡出

wpf(第一章 基础知识)