0

wpf がバックグラウンドで静的リソースを管理する方法を理解しようとしています。たとえば、コード ビハインドで静的リソースを取得して null に設定したり、新しいオブジェクトを定義したりしても、変更は反映されません。しかし、静的リソースを取得してそのプロパティを変更すると、変更が反映されます。プロパティを変更したり、オブジェクト参照を設定したりして、このように動作した場合、wpf はどのように理解しますか?

助けてくれてありがとう。

4

2 に答える 2

0

WPF がバインドするリソースは、ResourceDictionary. コード ビハインドでリソースへの参照を取得すると、どこかのディクショナリに既に含まれているリソースへの参照を取得し、それを変更します。したがって、それらの変更が表示されます。

コードを使用して最初から作成した場合、それを既存の辞書に追加するか、新しい辞書を作成しMergedDictionariesてアプリケーションに追加しない限り、WPF はそれが存在することを認識しません。詳細については、この SO の質問を参照してください: Programmatically add to Window.Resources in WPF

于 2012-05-10T21:10:52.487 に答える
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 に答える