当在WPF中使用画笔、模板和样式等资源时,它们可以指定为StaticResources
<Rectangle Fill="{StaticResource MyBrush}" />
或者作为一个动态资源
<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}" />
大多数时候(总是?),只有一个工作,而另一个将在运行时抛出异常。但我想知道为什么:
主要的区别是什么?比如对内存和性能的影响
WPF中是否存在“笔刷总是静态的”和“模板总是动态的”之类的规则?
我认为静态和动态之间的选择并不像看起来那么随意……但我看不出规律。
主要的区别是什么?比如对内存和性能的影响
当底层对象发生变化时,静态资源和动态资源之间的区别就显现出来了。如果在Resources集合中定义的Brush在代码中被访问并设置为不同的对象实例,Rectangle将不会检测到此更改。
静态资源通过引用元素检索一次,并在资源的生命周期内使用。而DynamicResources则在每次使用时进行检索。
动态资源的缺点是它们往往会降低应用程序的性能。
WPF中是否存在“笔刷总是静态的”和“模板总是动态的”之类的规则?
最好的做法是使用静态资源,除非有特定的原因,比如你想在后面的代码中动态地改变资源。当你使用systembrush, systemfonts和System Parameters时,你会想要使用动态资源的另一个例子。