我可以将 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 listview 绑定到数据集......可能......?