4

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 です。

<RadioButton.ToolTip>
    <FlowDocumentScrollViewer Document="{ext:HtmlToXaml Source={x:Static res:ExtrudeXaml.RadioButtonCreateBody_TooltipContent}}" ScrollViewer.VerticalScrollBarVisibility="Hidden" />
</RadioButton.ToolTip>

そして私のVSエラーリスト:

  • エラー 3 マークアップ拡張機能の解析中に、タイプ 'MS.Internal.Markup.MarkupExtensionParser+UnknownMarkupExtension' の不明なプロパティ 'Source' が検出されました。行 89 位置 49。
  • エラー 1 型 "HtmlToXamlExtension" には、指定された数の引数を持つコンストラクターが含まれていません。
  • エラー 2 タイプ 'HtmlToXamlExtension' のコンストラクターに 0 パラメーターがありません。
4

3 に答える 3

0

マークアップ拡張機能の既定のコンストラクターを作成する必要があります。すべて問題ありません。

于 2013-06-20T11:16:30.980 に答える