未在App.xaml中声明的资源上设置依赖项属性

时间:2015-10-28 12:38:26

标签: wpf

这是"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。我忘记了什么?

0 个答案:

没有答案