resources - WPF StaticResource vs DynamicResource -


i have xaml below

<window.resources>     <solidcolorbrush x:key="brushme" color="red"/>     <solidcolorbrush x:key="freezebrushme" po:freeze="true"  color="yellow"/> </window.resources> <stackpanel>             <button background="{staticresource brushme}">static</button>     <button background="{dynamicresource brushme}">dynamic</button>     <button click="button_click">changecolorproperty</button>     <button click="button1_click">changebrushobject</button>     <!--<button background="{staticresource notexistresource}" click="button_click_1">generateresourceforstatic</button>-->     <button background="{dynamicresource notexistresource}" click="button_click_1">generateresourcefordynamic</button>     <button background="green" click="button_click_1">fixedbrush</button>     <button background="{staticresource freezebrushme}">freezebrushstatic</button>     <button background="{dynamicresource freezebrushme}">freezebrushdynamic</button>     <button click="button_click_2">changefreezecolorproperty</button>     <button click="button_click_3">changefreezebrushobject</button> </stackpanel> 

in code behind, looks like

    private void button_click(object sender, routedeventargs e)     {         solidcolorbrush brush = (solidcolorbrush)this.findresource("brushme");         brush.color = colors.blue;         this.resources["brushme"] = brush;     }      private void button1_click(object sender, eventargs e)     {         solidcolorbrush newbrush = new solidcolorbrush(colors.yellow);         this.resources["brushme"] = newbrush;     }      private void button_click_1(object sender, routedeventargs e)     {         this.resources.add("notexistresource", new solidcolorbrush(colors.green));     }      private void button_click_2(object sender, routedeventargs e)     {         solidcolorbrush brush = (solidcolorbrush)this.findresource("freezebrushme");         brush.color = colors.blue;         this.resources["freezebrushme"] = brush;     }      private void button_click_3(object sender, routedeventargs e)     {         solidcolorbrush newbrush = new solidcolorbrush(colors.red);         this.resources["freezebrushme"] = newbrush;     } 

my question if click changebrushobject button first, change dynamic button yellow, click changecolorproperty button, change dynamic button blue, , not affecting static button.

however, if click changecolorproperty button on own, change both static , dynamic buttons blue.

why behaves this? wpf doesn't throw warnings when trying assign new object resource has been referenced static resource control?

i tested non-existing resource referenced dynamic resource. expected, if staticresource references non-existing resource, xaml complain @ compile time , dynamicresource not. however, if click generateresourcefordynamic button, shows green color background, fades away, , reappears again, , repeats. why happens this?

edit: added freeze resource, strange behaviour again. if click changefreezecolorproperty button, through exception. , if click changefreezebrushobject alone, change freezebrushdynamic button color. if click changefreezebrushobject , click changefreezecolorproperty, no exception thrown.

i think making resource freeze make properties of object linked resource readonly. why when changing property, through exception complaining readonly state. freeze doesn't stop changing object itself.


Comments

Popular posts from this blog

Android : Making Listview full screen -

javascript - Parse JSON from the body of the POST -

javascript - Chrome Extension: Interacting with iframe embedded within popup -