转换器不会有任何DataContext
因此即使您IValueConverter
派生自DependencyObject
并且 Tagger 是DependencyProperty
您将无法使用DataContext
,RelativeSource
或绑定它ElementName
。只有Source
会起作用(在你的情况下这不是很好)。
您可以x:Reference
改用
<UserControl Name="EventTagger" ...>
<UserControl.Resources>
<TagFrameVerificationConverter x:Key="tagFrameVerificationConverter"
Tagger="{x:Reference EventTagger}"/>
</UserControl.Resources>
</UserControl>
如果您使用的是 VS2010 设计器,您会收到一条错误消息
服务提供者缺少 INameResolver 服务
这只是一个设计器错误,可以按照此处在 connect:
Visual Studio 2010 InvalidOperationException using x:Reference in WPF中的描述解决。
如果我们处于设计模式,我们会ProvideValue
返回。null
[ContentProperty("Name")]
public class Reference : System.Windows.Markup.Reference
{
private static DependencyObject _dependencyObject = new DependencyObject();
public Reference()
: base()
{ }
public Reference(string name)
: base(name)
{ }
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (DesignerProperties.GetIsInDesignMode(_dependencyObject) == true)
{
return null;
}
return base.ProvideValue(serviceProvider);
}
}