我有一个WPF应用程序,我想使用一些静态资源。我创建了一个包含资源的资源库XAML文件。我还通过Properties面板在项目的Resources中添加了一个字符串。
我假设我可以将这些资源与绑定表达式一起使用:
{StaticResource ResourceName}
但是Visual Studio告诉我没有找到资源。我是否必须在我的XAML中包含某种形式的参考?我见过的例子只包括本地资源,如:
<Window.Resources>, <Page.Resources> etc
我不想在本地包含资源,因为我希望它们可用于应用程序的多个部分。
答案 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;。如果它没有找到我用作转换器的某些类型。