Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以将HTML绑定到WPF Web浏览器控件吗?_Wpf_Browser - Fatal编程技术网

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

我可以将HTML绑定到WPF Web浏览器控件吗?,wpf,browser,Wpf,Browser,假设我有一个属性HTML(字符串)。我可以将其绑定到WPF WebBrowser控件吗?有一个源属性,我需要一个URI,但如果我在内存中有一个HTML字符串,我想呈现,我可以这样做吗?我使用的是MVVM,所以我认为像webBrowser1.NavigateToString()等方法更难使用?因为我不知道控件名?请参阅问题 总之,首先为WebBrowser创建一个附加属性 public class BrowserBehavior { public static readonly Depen

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

请参阅问题

总之,首先为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时(例如,在模板化combobox的项时),它似乎不起作用(出于某种原因,OnHtmlChanged被提升了两次,第二次是null)。@tomer我遇到了同样的问题,所以我只是将e.NewValue作为字符串更改为e.NewValue作为字符串??" ". 我编辑了代码以反映这一点。