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 パラメーターがありません。