代码之家  ›  专栏  ›  技术社区  ›  Jiew Meng

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

  •  15
  • Jiew Meng  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  47
  •   Community CDub    8 年前

    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}" />