2012-05-10 9 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

おかげで私のようなコードを書くとき、今、これは、スタンダールbehavior.soです参照してください。 this.Resources [「yellowBrush」] = NULLを。 このリソースが静的な場合、変更はボタンの背景などに設定され、ブラシオブジェクトはまだそこにあるため反映されません。しかし、このリソースが動的であれば、変更が反映され、ボタンの背景色はnullになります。私の疑問とは逆に、ダイナミックな変化をどのように反映しているのでしょうか? – user1388106

+0

@user:実際は、動的リソースと同じです。リソースを変更する場合は、そのリソースが存在するリソース辞書を検索し、その辞書を更新する必要があります。 – Vlad

0

WPFがバインドするリソースは、ResourceDictionaryに含める必要があります。コードビハインド内のリソースへの参照を取得すると、辞書のどこかにすでに含まれているリソースへの参照が取得され、そのリソースに変更が加えられます。したがって、あなたはそれらの変化を見ることができます。

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

関連する問題