在WPF中以编程方式添加到Window.Resources

4
有没有一种方法可以在窗口级别而不是应用程序级别添加ResourceDictionary?
我看到很多类似这样的例子:
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);

然而,与我所期望的不同,没有像下面这样的内容:

但是,没有像我所期望的那样的内容,例如:

Window.Resources.MergedDictionaries.Add(myResourceDictionary);

预先感谢您的帮助。

1个回答

7

以下操作是不允许的:

Window.Resources

然而,您可以做到以下几点:

this.Resources.MergedDictionaries.Add(myResourceDictionary);

Resources(资源)是FrameworkElement的一个属性,被Application和Window(以及WPF中大多数其他用户界面类)共享。 但是,它是一个实例属性,而不是静态属性,因此您需要使用特定实例的资源。当您键入“Window.Resources”时,您正在尝试添加到“window”类型,而不是特定Window。

在您的应用程序行中运行此操作有效,因为Application.Current返回应用程序的当前实例,因此您正在使用正确的特定实例(而不是类型)。


如果我这样做,那么对资源的引用现在是DynamicResource而不是StaticResource吗?(我从窗口页面中删除了样式并将它们放入字典中) - TheGeekYouNeed
@TheGeekYouNeed:是的,基本上是这样。它们无法在编译时解析,因此必须以动态方式处理... - Reed Copsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接