web-dev-qa-db-ja.com

WPF WebBrowserコントロールの文字列からhtmlを表示する

データコンテキストオブジェクトには、WebBrowserコントロールで表示する必要があるhtmlを返す文字列プロパティが含まれています。バインドするWebBrowserのプロパティが見つかりません。何か案は?

ありがとう!

60
Andrey

WebBrowserには、HTMLコンテンツにナビゲートするために使用できる NavigateToString メソッドがあります。バインドできるようにする場合は、値が変更されたときにメソッドを呼び出すだけの添付プロパティを作成できます。

public static class BrowserBehavior
{
    public static readonly DependencyProperty HtmlProperty = DependencyProperty.RegisterAttached(
        "Html",
        typeof(string),
        typeof(BrowserBehavior),
        new FrameworkPropertyMetadata(OnHtmlChanged));

    [AttachedPropertyBrowsableForType(typeof(WebBrowser))]
    public static string GetHtml(WebBrowser d)
    {
        return (string)d.GetValue(HtmlProperty);
    }

    public static void SetHtml(WebBrowser d, string value)
    {
        d.SetValue(HtmlProperty, value);
    }

    static void OnHtmlChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        WebBrowser wb = d as WebBrowser;
        if (wb != null)
            wb.NavigateToString(e.NewValue as string);
    }
}

そして、次のように使用します(lclはxmlns-namespace-aliasです):

<WebBrowser lcl:BrowserBehavior.Html="{Binding HtmlToDisplay}" />
116
Abe Heidebrecht