在WPF中使用画笔、模板和样式等资源时,可以将它们指定为静态资源

<Rectangle Fill="{StaticResource MyBrush}" />

或者作为一个动态资源

<ItemsControl ItemTemplate="{DynamicResource MyItemTemplate}"  />

大多数时候(总是?),只有一个有效,另一个将在运行时引发异常.但我想知道为什么:

  • 主要区别是什么.比如记忆或性能影响
  • WPF中是否有"画笔总是静态的"和"模板总是动态的"等规则.?

在静态和动态之间的 Select 并不像看起来那么随意...但我看不到这种模式.

推荐答案

在实际运行应用程序之前加载XAML期间,将解析StaticResource并将其分配给属性.它将只分配一次,并且忽略对资源字典的任何更改.

DynamicResource在加载期间为属性分配表达式对象,但直到运行时请求表达式对象提供值时,才实际查找资源.这会推迟查找资源,直到运行时需要它.一个很好的例子是对稍后在XAML中定义的资源的正向引用.另一个例子是一个直到运行时才存在的资源.如果源资源字典发生更改,它将更新目标.

.net相关问答推荐

为什么Linq中的运算符逻辑不匹配结果,当值为0或在VB. NET中没有

.NET MAUI ListView - ObservableCollection - 在异步方法期间不更新

为什么这个同步运行的异步睡眠会挂起?

使用 PowerShell 从文件夹中获取文件名的最快\最好的方法是什么?

xunit Assert.ThrowsAsync() 不能正常工作?

如何在 MSBuild 脚本中获取当前目录?

编译时禁用 Dll 文化文件夹

Environment.TickCount 与 DateTime.Now

如何使用c#从excel文件中读取数据

为什么 LINQ .Where(predicate).First() 比 .First(predicate) 快?

如何判断对象是否是某种类型的数组?

在 ToString() 之前判断 null

有没有办法只在 C# 中设置一次属性

公钥令牌的作用是什么?

从 Windows 窗体打开 URL

SQLParameter 如何防止 SQL 注入?

C#中的引用类型

Find() 和 First() 抛出异常,如何改为返回 null?

EF Core 添加迁移构建失败

当它被抛出和捕获时,不要在那个异常处停止调试器