根据当前数据绑定为属性提供资源

时间:2012-02-19 05:24:50

标签: wpf xaml

我有一些情况,我试图提供强类型的XAML标记来查找特定对象的资源,并将其作为绑定应用于属性。例如,根据当前的DataContext查找ImageSources。或者基于新的给定绑定。

例如,我希望像这样的标记起作用:

<Style>
    <Style.Setters>
        <Setter
            Property="DefaultImageSource"
            Value="{ns:ImageSourceForObject Path}" />
    </Style.Setters>
</Style>

ns:ImageSourceForObject的操作很像Binding,最终解析为特定的实例。然后它将查找与该实例关联的ImageSource资源。

我遇到的主要问题是弄清楚如何实际解析ProvideValue中的资源。似乎没有办法获得对FrameworkElement的引用。

我在ValueConverter中遇到同样的问题。

1 个答案:

答案 0 :(得分:0)

根据MSDN

  

IProvideValueTarget报告对象引用和属性   来自使用标记扩展的上下文的标识符

因此,我希望你做这样的事情:

var provideValueTarget = (IProvideValueTarget)serviceProvider.GetService(typeof(IProvideValueTarget));
var valueTarget = provideValueTarget.TargetObject as FrameworkElement;

if (valueTarget == null)
{
    // or maybe throw
    return null;
}

var resource = valueTarget.FindResource("whatever");

// etc.