有一个奇怪的请求。我需要在动态资源相对于FrameworkElement更改时收到通知,但我没有在上设置属性该FrameworkElement。因此,我无法在XAML中使用{DynamicResource someKey}
,也无法在代码隐藏中使用someElement.SetResourceReference()
。
现在获取当前值很容易。你只需要调用someElement.FindResource("someKey")
即可获得当前值,但这需要轮询。
我考虑创建一个我可以绑定到的人造绑定源对象,但问题是它不是可视化树的一部分,所以除非在应用程序级别定义了该资源,否则你赢得了#39;得到它。你也不能把东西塞进可视树中。
我已经看到使用可以定义DependencyProperty的行为的答案,当附加到FrameworkElement时,它们确实会更新,因为我不知道如何调用XAML行为 - 相当于FrameworkElement的setResourceReference。
所以...想法?
答案 0 :(得分:0)
如果没有使用,很难给出令人满意的答案。行为A.K.A附加属性解决方案将起作用,但它使用DependencyProperty
。
public static class AttachedProperty
{
public static readonly DependencyProperty DynamicResourceProperty = DependencyProperty.RegisterAttached("DynamicResource", typeof(object), typeof(AttachedProperty), new PropertyMetadata(null));
public static object GetDynamicResource(DependencyObject obj)
{
return (object)obj.GetValue(DynamicResourceProperty);
}
public static void SetDynamicResource(DependencyObject obj, object value)
{
obj.SetValue(DynamicResourceProperty, value);
}
}
您可以在要跟踪资源的元素上设置附加属性。
<Grid x:Name="grid" my:AttachedProperty.DynamicResource="{DynamicResource Brush}"/>
这是你可以绑定的DependecyProperty
,获取通知并将值传递给转换器。