我有一个自定义MarkupExtension,它为应用程序中的很多地方提供了Brushes。它运行良好,直到我想在运行时更改颜色。
为了开始为UI提供不同的值,我会尽我所能。
我想知道有没有办法强制WPF应用程序重绘并重新评估所有标记扩展。
答案 0 :(得分:1)
标记扩展本质上是一个值占位符。无法知道标记扩展最初生成哪些属性值;一旦调用ProvideValue()
,结果将替换扩展名,并且所有扩展知识都将消失。
你可以做的是将自定义标记扩展委托给DynamicResourceExtension
并生成基于表达式的值,一旦替换相应的画笔资源,它将更新:
public override object ProvideValue(IServiceProvider serviceProvider) {
var brushKey = /* resolve resource key for brush */;
return new DynamicResourceExtension(brushKey).ProvideValue(serviceProvider);
}