Створення розширення розмітки з конвертером

Я намагаюся створити розширення розмітки, яке буде приймати рядок HTML, перетворити його в FlowDocument і повернути FlowDocument. Я досить новий для створення розширень розмітки, і я сподіваюсь, що це буде очевидним для когось з більшим досвідом роботи. Ось мій код:

[MarkupExtensionReturnType(typeof(FlowDocument))]
public class HtmlToXamlExtension : MarkupExtension
{
    public HtmlToXamlExtension(String source)
    {
        this.Source = source;
    }

    [ConstructorArgument("source")]
    public String Source { get; set; }

    public Type LocalizationResourceType { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        if (this.Source == null)
        {
            throw new InvalidOperationException("Source must be set.");
        }

        FlowDocument flowDocument = new FlowDocument();
        flowDocument.PagePadding = new Thickness(0, 0, 0, 0);
        string xaml = HtmlToXamlConverter.ConvertHtmlToXaml(Source.ToString(), false);

        using (MemoryStream stream = new MemoryStream((new ASCIIEncoding()).GetBytes(xaml)))
        {
            TextRange text = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd);
            text.Load(stream, DataFormats.Xaml);
        }

        return flowDocument;
    }
}

Оновлення: ось XAML.


    

І мій список помилок VS:

  • Помилка 3 Невідома властивість "Джерело" для типу "MS.Internal.Markup.MarkupExtensionParser + UnknownMarkupExtension", яка зіткнулася під час аналізу розширення розмітки. Рядок 89 Позиція 49.
  • Помилка 1 Тип "HtmlToXamlExtension" не містить конструктора, що містить вказану кількість аргументів.
  • Помилка 2 Конструктор типу 'HtmlToXamlExtension' не має 0 параметрів.
4
І яке питання? Чи щось не працює?
додано Автор Clemens, джерело
Помилки 1 і 2 здаються досить очевидними. Просто додайте конструктор за замовчуванням. Потім помилка 3 - це, мабуть, лише підсумок.
додано Автор Clemens, джерело
@ статакара Це ще краще.
додано Автор Clemens, джерело
Чи можете ви опублікувати відповідний XAML також, будь ласка?
додано Автор sthotakura, джерело
Спробуйте повністю вилучити конструктор; У будь-якому разі, ваша власність Джерело має загальнодоступний сестер.
додано Автор sthotakura, джерело
@staotakara Видалення конструктора працювало як шарм, спасибі.
додано Автор MCRXB, джерело
@staotakara Видалення конструктора працювало як шарм, спасибі.
додано Автор MCRXB, джерело
@staotakara Видалення конструктора працювало як шарм, спасибі.
додано Автор MCRXB, джерело
@staotakara Видалення конструктора працювало як шарм, спасибі.
додано Автор MCRXB, джерело

7 Відповіді

Ви впровадили вам MarkupExtension без конструктора за замовчуванням: Отже, у вас є 2 варіанти:

  1. Delete your specific constructor (Anyway you set Source directly)
  2. Change invocation of you HtmlToXamlExtension if you remove Source= part, then wpf will try to find constructor matching all unnamed fields right after ext:HtmlToXaml part:

    
      
    
    

    UPD: Even though it works, but MSDN says, that you should have default constructor

Сподіваюся, це допомагає.

3
додано

Ви впровадили вам MarkupExtension без конструктора за замовчуванням: Отже, у вас є 2 варіанти:

  1. Delete your specific constructor (Anyway you set Source directly)
  2. Change invocation of you HtmlToXamlExtension if you remove Source= part, then wpf will try to find constructor matching all unnamed fields right after ext:HtmlToXaml part:

    
      
    
    

    UPD: Even though it works, but MSDN says, that you should have default constructor

Сподіваюся, це допомагає.

3
додано

Ви впровадили вам MarkupExtension без конструктора за замовчуванням: Отже, у вас є 2 варіанти:

  1. Delete your specific constructor (Anyway you set Source directly)
  2. Change invocation of you HtmlToXamlExtension if you remove Source= part, then wpf will try to find constructor matching all unnamed fields right after ext:HtmlToXaml part:

    
      
    
    

    UPD: Even though it works, but MSDN says, that you should have default constructor

Сподіваюся, це допомагає.

3
додано

Ви повинні створити конструктор за замовчуванням для розширення розмітки, і все буде добре.

0
додано

Ви повинні створити конструктор за замовчуванням для розширення розмітки, і все буде добре.

0
додано

Ви повинні створити конструктор за замовчуванням для розширення розмітки, і все буде добре.

0
додано

Ви повинні створити конструктор за замовчуванням для розширення розмітки, і все буде добре.

0
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug