通过绑定在鼠标单击时导航 WebBrowser

Posted

技术标签:

【中文标题】通过绑定在鼠标单击时导航 WebBrowser【英文标题】:Navigate WebBrowser on mouse click through binding 【发布时间】:2013-09-06 10:16:09 【问题描述】:

我有一个使用 MVVM 模型的 WPF 项目。

在我的视图中,我设置了一个名为 myWebBrowser 的不可见 WebBrowser,用于在网络上执行操作(似乎当我动态创建 WebBrowser 时它不起作用按预期)。

我的视图中还有一个按钮,单击该按钮通常会启动在 ViewModel 中设置的无效操作。没关系。我遇到的问题是我希望那个 void 做一些事件,例如:

myWebBrowser.Navigate(url)
myWebBrowser.LoadCompleted += WebBrowserLoaded;

并基本上使用视图中的不可见 WebBrowser 启动进程。

由于 ViewModel 拒绝我使用控件名称来引用它,我该如何实现?

【问题讨论】:

也许您可以将浏览器作为视图模型的一部分并使用 contentpresenter 将其内容绑定到视图模型的该属性? 【参考方案1】:

您可以创建一个Attached Property 来为您执行此操作:

public static class WebBrowserProperties

    public static readonly DependencyProperty UrlProperty = DependencyProperty.RegisterAttached("Url", typeof(string), typeof(WebBrowserProperties), new UIPropertyMetadata(string.Empty, UrlPropertyChanged));

    public static string GetUrl(DependencyObject dependencyObject)
    
        return (string)dependencyObject.GetValue(UrlProperty);
    

    public static void SetUrl(DependencyObject dependencyObject, string value)
    
        dependencyObject.SetValue(UrlProperty, value);
    

    public static void UrlPropertyChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
    
        WebBrowser webBrowser = dependencyObject as WebBrowser;
        if (webBrowser != null && GetUrl(webBrowser) != string.Empty)
        
            webBrowser.Navigate(GetUrl(webBrowser));
            webBrowser.LoadCompleted += WebBrowserLoaded;
        
    

    public static void WebBrowserLoaded(object sender, NavigationEventArgs e)
    
    

你可以这样使用它:

<WebBrowser Attached:WebBrowserProperties.Url="Binding YourUrlProperty" />

要更新内容,只需更改YourUrlProperty 属性的值即可。

【讨论】:

【参考方案2】:

如果您的浏览器是 xaml 中的隐藏元素,请尝试使用 EventToCommand。

【讨论】:

【参考方案3】:

Sheridan 的答案很完美,但您可能需要包含 xmlns attribute

如果您使用的是namespacesxmlns:Attached="clr-namespace:foo.my.namespace"

【讨论】:

以上是关于通过绑定在鼠标单击时导航 WebBrowser的主要内容,如果未能解决你的问题,请参考以下文章

VB模拟鼠标点击webbrowser控件网页

易语言怎么webbrowser1中模拟鼠标单击?

MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应

C#怎样判断鼠标移动到控件上了

TEventObject 和 WebBrowser

单击鼠标时如何跟随本机