【问题标题】:Acessing control in one window from another in WPF在 WPF 中从另一个窗口访问控件
【发布时间】:2013-09-07 21:28:32
【问题描述】:

我正在制作我的第一个 WPF 应用程序,这是我在 WPF 中的应用程序的新版本。我在 WindowsFormsHost 中有一个 Winforms Web 浏览器。我需要从另一个窗口访问这个网络浏览器,以便从不同的按钮加载网站。在我以前使用的 Winforms 中:

Form1.WebBrowser1.Navigate("website")

但这在 WPF 中不起作用。我试过这个:

Public Class Quicksites
    Dim main As New MainWindow
    Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
        main.WebBrowser1.Navigate("http://www.google.com")
    End Sub

这不起作用,因为网站永远不会加载到主窗口的WebBrowser 中。

我做错了什么?

【问题讨论】:

    标签: wpf vb.net xaml


    【解决方案1】:

    您没有在名为mainMainWindow 表单变量上调用.Show()。还想知道为什么按钮的单击事件中没有Handles 子句?你Addhandler那个了吗?

    Public Class Quicksites
     Dim main As New MainWindow
     Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button.Click
        main.Show()
        main.WebBrowser1.Navigate("http://www.google.com")
     End Sub
    

    【讨论】:

    • 虽然这确实有效,但这不是我想要的。我希望网站在已经打开的窗口中打开。我声明 main 变量的原因是因为 MainWindow.WebBrowser1 不起作用。如果我尝试使用它,我会收到错误“对非共享成员的引用需要对象引用”。声明主变量,我可以使用 Webbrowser1.Navigate。
    • 那么您需要该表单内的 Web 浏览器控件。或使用Frame 控件。
    【解决方案2】:

    在 WPF 中直接使用没有 WindowsFormsHost 的 WebBrowser 控件,您应该使用这样的 Uri 进行导航:

    browser.Navigate(new Uri("http://www.google.com"));
    

    在 xaml 文件中:

    <WebBrowser x:Name="browser"/>
    

    您的代码应该可以正常工作。

    【讨论】:

    • 我使用的是 WinForms WebBrowser,因为 WPF WebBrowser 控件缺少某些我需要使用的成员,例如“停止”和“打印”。
    • 我认为你没有使用你想要的实例。如果您想使用正确的 webbrowser 实例,您需要将它传递给您的 QuickSites 类,例如在类构造函数中,或者对于您的代码,您需要传递整个 MainWindow 实例。如何通过以及使用接收 url 的 Navigate 方法的接口是另一个主题,例如stackoverflow.com/questions/18311215/…
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    相关资源
    最近更新 更多