转换器将不会有任何DataContext
所以即使你IValueConverter
从DependencyObject
派生并标注器是一个DependencyProperty
,你将无法使用DataContext
,RelativeSource
或ElementName
绑定它。只有Source
会起作用(在你的情况下这不太好)。
您可以使用x:Reference
代替
<UserControl Name="EventTagger" ...>
<UserControl.Resources>
<TagFrameVerificationConverter x:Key="tagFrameVerificationConverter"
Tagger="{x:Reference EventTagger}"/>
</UserControl.Resources>
</UserControl>
如果您使用Visual Studio 2010的设计,你会得到一个错误说
服务提供商缺少INameResolver服务
这只是一个设计师的错误,它可以按照连接描述的方式进行处理:
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);
}
}
您可以使用转换器参数? – CodingGorilla
我不这么认为,因为我不认为你可以在转换器参数中使用绑定。 – dbromberg
不,你是对的,因为转换参数是绑定本身的一部分。那么你只需要在你的转换器上设置一个属性?我想你上面的XAML对我来说不是很清楚你想要做什么。 – CodingGorilla