![]() |
1
423
一 StaticResource 将在加载应用程序实际运行之前发生的XAML期间解析并分配给属性。它将只分配一次,并且忽略对资源字典的任何更改。 一 DynamicResource 在加载期间将表达式对象分配给属性,但在运行时要求表达式对象提供值时才实际查找资源。这会推迟查找资源,直到在运行时需要它为止。一个很好的例子是对稍后在XAML中定义的资源的正向引用。另一个例子是直到运行时才存在的资源。如果更改了源资源字典,它将更新目标。 |
![]() |
2
112
我也对他们感到困惑。请参见下面的示例:
在这里,我使用了按钮和窗口的动态资源,没有在任何地方声明它。运行时,将检查层次结构的ResourceDictionary。由于我没有定义它,我想将使用默认值。 如果我将下面的代码添加到click event of button中,因为它们使用动态源,所以背景将相应地更新。
如果他们使用了StaticResource:
希望我能消除一些困惑。 |
![]() |
3
29
静态资源将在对象构造上解决。
|
![]() |
4
25
逻辑资源允许您在XAML中定义对象,这些对象不是可视树的一部分,但可以在用户界面中使用。逻辑资源的一个例子是brush,它用于提供颜色方案。通常,这些对象定义为资源,由应用程序的多个元素使用。
现在,上述声明的资源可以用作静态或动态资源。要记住的一点是,当使用静态资源时,应该首先在XAML代码中定义它,然后才能引用它。静态和动态资源可用作:
或:
StaticResource和DynamicResource的区别在于引用元素如何检索资源。静态资源只能由引用元素检索一次,并在资源的整个生命周期中使用。另一方面,每次使用引用的对象时都会获取动态源。 简单来说,如果radialGradientBrush的颜色属性在代码中更改为橙色和粉色,那么只有当资源用作动态源时,它才会反映在元素上。下面是更改代码中资源的代码:
DynamicResource的缺点是它会降低应用程序性能,因为每次使用时都会检索资源。最佳实践是静态资源使用,直到有特定的理由使用动态资源为止。 |
![]() |
5
18
假设您有这个嵌套样式字典。浅绿色位于根级别,而粉红色嵌套在网格中。
鉴于:
StaticResource将把按钮呈现为浅绿色,这是在样式中找到的第一个值。动态源将在呈现网格时将浅绿色按钮覆盖为粉红色。
请记住,VS设计器将动态资源视为静态资源。它将得到第一个值。在这种情况下,vs designer会将按钮呈现为浅绿色,尽管它实际上是粉红色的。 当删除根级别样式(浅绿色)时,StaticResource将抛出一个错误。 |
![]() |
6
13
主要区别是什么?像记忆或性能影响 当底层对象发生更改时,静态资源和动态资源之间的差异就会出现。如果在代码中访问了资源集合中定义的画笔并将其设置为其他对象实例,则矩形将不会检测到此更改。 静态资源通过引用元素检索一次,并在资源的生命周期中使用。然而,动态资源每次使用时都会检索。 动态资源的缺点是它们往往会降低应用程序性能。 WPF中是否有“画笔总是静态的”和“模板总是动态的”等规则? 最佳实践是使用静态资源,除非有特定的原因,如您希望动态更改代码隐藏中的资源。另一个不希望使用动态资源的实例示例包括使用SystemBrush、SystemEnfonts和系统参数时。 |
![]() |
7
7
找到所有有用的答案,只想再添加一个用例。 在复合WPF场景中,用户控件可以通过将该资源引用为动态源来使用在任何其他父窗口/控件(将承载此用户控件)中定义的资源。 正如其他人提到的,静态资源将在编译时被查找。用户控件不能引用宿主/父控件中定义的资源。不过,在这种情况下可以使用动态资源。 |
![]() |
8
3
动态资源的重要效益 如果应用程序启动需要非常长的时间,则必须使用动态资源, 因为静态资源总是在创建窗口或应用时加载,而动态资源 首次使用时加载。 但是,除非您的资源非常大并且 复杂的。 |
![]() |
9
1
动态资源只能在所设置的属性位于从依赖对象派生的对象上或可冻结的对象上时使用,因为静态资源可以在任何位置使用。 您可以使用静态资源抽象出整个控件。 静态资源在以下情况下使用:
动态资源:
|
![]() |
user180708 · 将日期转换为英文日期 6 年前 |
![]() |
Anthony Smyth · 如何更改禁用WPF按钮的按钮样式? 6 年前 |
![]() |
Donat · 在XAML中绑定单例(UWP) 6 年前 |
![]() |
Amibluesky · 扩展/减少文本块WPF/Xaml中的符号 6 年前 |
![]() |
smoore4 · 访问代码隐藏中的XAML绑定 6 年前 |