轉換器將不會有任何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