2012-05-10 3 views
0

Я пытаюсь выяснить, как wpf управляет статическими ресурсами в фоновом режиме. Например, если я получаю статический ресурс в коде позади и устанавливаю его в null или определяя для него новый объект, изменения не отражаются. Но если я получу статический ресурс и изменю его свойство, изменения будут reflacted. Как wpf понимает, изменил ли я свойство или установил ссылку на объект и ведет себя таким образом?Как Wpf управляет статическими ресурсами?

Спасибо за помощь.

ответ

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 

Точно так же он идет со статическими ресурсами: вы получите ссылку на объект, так что если вы обнулять вашу ссылку, другие не будут говорить об этом: они просто еще одна ссылка ,

+0

спасибо за ваши answer.i видеть теперь это стандарт behavior.so, когда я пишу код, как: this.Resources [ «yellowBrush»] = NULL; Если этот ресурс статичен, изменение не отражается, поскольку оно было настроено, например, на фон кнопки, и мой объект кисти все еще существует. Но если этот ресурс был динамическим, тогда он отражал бы изменения, а цвет фона моей кнопки становился нулевым. Теперь я задаюсь вопросом о противоположности моего вопроса, как он отражает изменения, когда он является динамическим? – user1388106

+0

@user: на самом деле то же самое с динамическим ресурсом. Если вы хотите изменить ресурс, вы должны найти словарь ресурсов, где он находится, и обновить этот словарь. – Vlad

0

Ресурсы, которые WPF связывает с необходимостью включения в ResourceDictionary. Когда вы получаете ссылку на ресурс в коде, вы получаете ссылку на ресурс, который уже был включен в словарь, а затем внося изменения в него. Таким образом, вы видите эти изменения.

Если вы создаете его с нуля с помощью кода, то, если вы не добавите его в существующий словарь или не создадите новый, а добавьте его в MergedDictionaries для приложения, то WPF не знает, что он существует. Смотрите этот вопрос SO для получения дополнительной информации о том, что: Programmatically add to Window.Resources in WPF