Wpf如何管理静态资源?

时间:2012-05-10 21:01:10

标签: wpf staticresource

我试图找出wpf如何在后台管理静态资源。例如,如果我在后面的代码中获取静态资源并将其设置为null或为其定义新对象,则不会反映更改。但是,如果我获得静态资源并更改其属性,则会更改更改。如果我更改了属性或设置了对象referance并以这种方式运行,wpf如何理解?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

实际上,这只是对象在.NET中的行为标准方式。某处有一些对象。你得到一个对象的引用,如果你将本地引用设置为null,那么持有引用的任何其他对象都不会注意到 - 毕竟,它们有自己的引用!

但如果您更改引用“指向”的内容,则现在更改实际数据,以便每个人都能看到它!

示例:

class MyObject { public int i; }

MyObject ref1 = new MyObject() { i = 100 };
MyObject ref2 = ref1; // ref2 is just another reference to the object
ref1 = null;
Console.WriteLine(ref2.i); // prints 100, the object is still alive
ref1 = ref2;
ref1.i = 50;
Console.WriteLine(ref2.i); // prints 50, the object is changed

与静态资源相同:你得到对象的引用,所以如果你将你的引用归零,其他人就不会提到它:它们只是有另一个引用。

答案 1 :(得分:0)

WPF绑定的资源需要包含在ResourceDictionary中。当您在代码隐藏中获得对资源的引用时,您将获得对已在某个字典中包含的资源的引用,然后对其进行更改。因此,你会看到这些变化。

如果您是通过代码从头创建一个,那么除非您将其添加到现有字典或创建一个新字典并将其添加到应用程序的MergedDictionaries,否则WPF不知道它存在。有关详细信息,请参阅此SO问题:Programmatically add to Window.Resources in WPF