我可以将 HTML 绑定到 WPF Web 浏览器控件吗?

Posted

技术标签:

【中文标题】我可以将 HTML 绑定到 WPF Web 浏览器控件吗?【英文标题】:Can I bind HTML to a WPF Web Browser Control? 【发布时间】:2011-05-11 07:38:29 【问题描述】:

假设我有一个属性 html(字符串)。我可以将它绑定到 WPF WebBrowser 控件吗?我需要一个 URI 的 Source 属性,但是如果我在内存中有一个要呈现的 HTML 字符串,我可以这样做吗?我正在使用 MVVM,所以我认为使用 webBrowser1.NavigateToString() 等方法更难?因为我不知道控件名称?

【问题讨论】:

【参考方案1】:

请参阅this 问题。

总而言之,首先为 WebBrowser 创建一个附加属性

public 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 dependencyObject, DependencyPropertyChangedEventArgs e)
    
        WebBrowser webBrowser = dependencyObject as WebBrowser;
        if (webBrowser != null)
            webBrowser.NavigateToString(e.NewValue as string ?? " ");
    

然后您可以绑定到您的 html 字符串,并且每次您的 html 字符串更改时都会调用 NavigateToString

<WebBrowser local:BrowserBehavior.Html="Binding MyHtmlString" />

【讨论】:

这是一个不错的技巧。但是,当尝试在 DataTemplate 中嵌入 WebBrowser 时(例如,在模板化组合框的项目时),它似乎不起作用(由于某种原因,OnHtmlChanged 被提升了两次,第二次为 null)。 @tomer 我遇到了同样的问题,所以我只是将 e.NewValue 作为字符串更改为 e.NewValue 作为字符串? “ ”。我编辑了代码以反映这一点。

以上是关于我可以将 HTML 绑定到 WPF Web 浏览器控件吗?的主要内容,如果未能解决你的问题,请参考以下文章

WPF多源绑定

WPF绑定到集合

将 wpf listview 绑定到数据集......可能......?

WPF如何将mousedown(命令/动作)绑定到标签

如何将 DataGrid 中的文本框绑定到 Wpf 中的列表?

无法将mysql数据绑定到golang中的html模板