我有一些情况,我试图提供强类型的XAML标记来查找特定对象的资源,并将其作为绑定应用于属性。例如,根据当前的DataContext查找ImageSources。或者基于新的给定绑定。
例如,我希望像这样的标记起作用:
<Style>
<Style.Setters>
<Setter
Property="DefaultImageSource"
Value="{ns:ImageSourceForObject Path}" />
</Style.Setters>
</Style>
ns:ImageSourceForObject的操作很像Binding,最终解析为特定的实例。然后它将查找与该实例关联的ImageSource资源。
我遇到的主要问题是弄清楚如何实际解析ProvideValue中的资源。似乎没有办法获得对FrameworkElement的引用。
我在ValueConverter中遇到同样的问题。
答案 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.