0

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

感谢您的帮助。

4

2 回答 2

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

与静态资源相同的方式:您获得对对象的引用,因此如果您取消引用,其他人不会提及它:他们只是有另一个引用。

于 2012-05-10T21:08:56.423 回答
0

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

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

于 2012-05-10T21:10:52.487 回答