通过绑定在鼠标单击时导航 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
如果您使用的是namespaces
:xmlns:Attached="clr-namespace:foo.my.namespace"
【讨论】:
以上是关于通过绑定在鼠标单击时导航 WebBrowser的主要内容,如果未能解决你的问题,请参考以下文章
MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应