【发布时间】:2015-11-19 07:46:48
【问题描述】:
有一个奇怪的要求。当动态资源相对于 FrameworkElement 发生更改时,我需要得到通知,但我没有在该 FrameworkElement 上设置属性 on。因此,我不能在 XAML 中使用 {DynamicResource someKey},也不能在代码隐藏中使用 someElement.SetResourceReference()。
现在获取当前值很容易。您只需调用 someElement.FindResource("someKey") 即可获得当前值,但这需要轮询。
我考虑创建一个虚假的绑定源对象,然后我可以绑定到该对象,但问题是它不是可视化树的一部分,因此除非在应用程序级别定义该资源,否则您将无法获得它。你也不能把东西塞进视觉树。
我看到了一个使用 Behaviors 的答案,它可以定义一个 DependencyProperty,当附加到 FrameworkElement 时,它们确实会像人们怀疑的那样更新,但这需要 XAML,因为我不知道如何调用 Behaviors-equivalent FrameworkElement 的 setResourceReference。
所以...想法?
【问题讨论】:
-
你为什么需要这样的东西?你确定资源是要走的路吗?
-
大声笑...我喜欢人们评论用法而不是问题。是的,它必须是一种资源。我过度简化它以获得我需要的核心信息,它能够绑定到动态资源并通过转换器提供它。我实际上找到了一个 DynamicResourceExtension 形式的解决方案,其中在 ProvideValue 中我从 ProvideValue() 获取基值,将其设置为自定义行为上的 Dp 类型对象的值,将行为添加到目标框架元素的行为,然后也将它用作我设置转换器并返回的绑定源。
标签: c# wpf binding behavior dynamicresource