这是"Reuse element defined further up in App.xaml"的后续问题。我尝试通过实现ConverterReference-Converter来解决它:
public class ConverterReference : DependencyObject, IValueConverter
{
public static readonly DependencyProperty ConverterProperty = DependencyProperty.Register("Converter", typeof (ConverterBase), typeof(ConverterReference));
public ConverterBase Converter
{
get { return (ConverterBase)GetValue(ConverterProperty); }
set { SetValue(ConverterProperty, value); }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return this.Converter.Convert(value, targetType, parameter, culture);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return this.Converter.ConvertBack(value, targetType, parameter, culture);
}
}
在我的App.xaml中,我声明如下:
<c:ConverterChain x:Key="IsNotNull">
<c:IsNullConverter />
<c:InvertBoolConverter />
</c:ConverterChain>
<c:ConverterChain x:Key="HideWhenNull">
<!-- see here -->
<c:ConverterReference Converter="{Binding Mode=OneWay, Source={StaticResource IsNotNull}}" />
<c:BoolToFromVisibilityConverter FalseEquivalent="Hidden" />
</c:ConverterChain>
然而,当我在绑定中使用此转换器时
<Label Content="Hello world!" Visibility="{Binding Converter={StaticResource HideWhenNull}, Mode=OneWay}" />
编译器告诉我有一个空引用,通过调试我发现在App.xaml中声明的ConverterReference实例的Dependency属性没有设置,因此当绑定试图获取转换器时它变为null返回ConverterReference.Converter。我忘记了什么?