Түрлендіргішпен белгілеу кеңейтімін жасау

HTML жолын қабылдайтын, оны FlowDocument түрлендіретін және FlowDocument файлын қайтаратын таңбалау кеңейтімін жасауға тырысамын. Мен Markup Extensions жасау үшін өте жаңа және бұл тәжірибе бар біреуге айқын болады деп үміттенемін. Міне, менің код:

[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» түріне арналған белгісіз қасиет 'Source'. Line 89 позициясы
  • Қате 1 «HtmlToXamlExtension» түрі көрсетілген аргументтер саны бар конструкторды қамтымайды.
  • Қате 2 'HtmlToXamlExtension' түріндегі конструктор 0 параметрі жоқ.
4
Сұрақ дегеніміз не? Бірдеңе жұмыс істемейді ме?
қосылды автор Clemens, көзі
1 және 2 қателіктер айқын көрінеді. Әдепкі конструкторды қосыңыз. Сонда 3-қате тек кейінге қалдырады.
қосылды автор Clemens, көзі
@sthotakura Бұл тіпті жақсы.
қосылды автор Clemens, көзі
Сіз тиісті XAML-ті орналастыра аласыз ба?
қосылды автор sthotakura, көзі
Конструкторды толығымен алып тастауға тырысыңыз; Қалай болғанда да, сіздің Қайнар көзіңізде жалпыға қол жетімді белгілер болады.
қосылды автор sthotakura, көзі
@sthotakura Конструкторды жою шеберлігімен жұмыс істеді, рақмет.
қосылды автор MCRXB, көзі
@sthotakura Конструкторды жою шеберлігімен жұмыс істеді, рақмет.
қосылды автор MCRXB, көзі
@sthotakura Конструкторды жою шеберлігімен жұмыс істеді, рақмет.
қосылды автор MCRXB, көзі
@sthotakura Конструкторды жою шеберлігімен жұмыс істеді, рақмет.
қосылды автор 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
қосылды