.net WPF IValueConverter构造函数

poy*_*poy 1 c# wpf ivalueconverter visual-studio-2012

简单的问题:

为什么我必须要constructor一个IValueConverter

我不是在问,为什么我必须要一个empty constructor,我问为什么我必须要一个?

如果我有:

public class PauseButtonValueConverter : MarkupExtension, IValueConverter
{
  //public PauseButtonValueConverter() //<- Uncomment this and the error is fixed
  //{
  //}

  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    throw new NotImplementedException();
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
    throw new NotImplementedException();
  }

  public override object ProvideValue(IServiceProvider serviceProvider)
  {
    return this;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,我VS2012给了我编译时错误:No constructor for type 'PauseButtonValueConverter' has 0 parameters.

如果我添加constructor,错误是固定的.

Mic*_*ter 5

这是因为你是从MarkupExtension派生出来的,它的构造函数受到保护.在这种情况下,编译器不会自动生成默认构造函数.你必须自己添加它.

在大多数情况下,创建值转换器时不需要从MarkupExtension派生.我假设你有这个原因,但如果没有,只需删除基类.