WPF重新粉刷所有人

时间:2014-10-13 15:32:03

标签: wpf

我有一个自定义MarkupExtension,它为应用程序中的很多地方提供了Brushes。它运行良好,直到我想在运行时更改颜色。

为了开始为UI提供不同的值,我会尽我所能。

我想知道有没有办法强制WPF应用程序重绘并重新评估所有标记扩展。

1 个答案:

答案 0 :(得分:1)

标记扩展本质上是一个值占位符。无法知道标记扩展最初生成哪些属性值;一旦调用ProvideValue(),结果将替换扩展名,并且所有扩展知识都将消失。

可以做的是将自定义标记扩展委托给DynamicResourceExtension并生成基于表达式的值,一旦替换相应的画笔资源,它将更新:

public override object ProvideValue(IServiceProvider serviceProvider) {
    var brushKey = /* resolve resource key for brush */;
    return new DynamicResourceExtension(brushKey).ProvideValue(serviceProvider);
}