如何从类中访问TabControl?

时间:2013-12-29 22:20:33

标签: wpf vb.net xaml chromium-embedded cefsharp

我在学习视觉基础方面需要一周的时间,而且我完全陷入困境。

我在WPF的XAML中有一个带有2个TabItem的TabControl:

<TabControl Name="browser_tabs" Width="Auto" Height="Auto" BorderThickness="0">

        <TabItem Header="My Page">
            <DockPanel Name="tab1" Width="Auto" Height="Auto" Background="#fefefe" />
        </TabItem>

        <TabItem Header="Browser" Name="browserTab">
            <DockPanel Name="tab2" Width="Auto" Height="Auto" Background="#fefefe" />
        </TabItem>

    </TabControl>

我正在尝试从MainWindow类中的类bookmarkControlsObj更改选项卡(以编程方式/有问题的方式):

Class MainWindow
    ...

    Public Class bookmarkControlsObj
        Public Sub follow(ByVal url As String)
            browser_tabs.selectedIndex = 1 '<--- ahhhhhhhhhhhhhhhhhhh!'
            web_view2.Load(url)
        End Sub
    End Class

End Class

但我一直得到“Reference to a non-shared member requires an object reference.” - 我不知道如何在bookmarkControlsObj类中共享XAML TabControl ..这让我发疯了。请帮忙。

编辑:

我有一个嵌套类的原因是因为我在cefsharp(chrome嵌入式)WebView中调用类中的“follow”Sub,其中包含一个带有Javascript函数的页面 - 使用RegisterJsObject I'我可以通过Javascript调用vb.net方法。在这种情况下,我正在向“跟随”Sub发送一个URL,它将其加载到第二个TabItem中包含的浏览器中,但是我希望它在加载之前自动切换到该选项卡 - 长话短说,{{1}似乎只有当它包含在一个类中时才起作用..虽然它只是嵌套,因为它就是它最终的位置。

我可以在类的第二个选项卡中访问浏览器,因为我将其声明为“shared”并将其添加到TabItem中 - 但我不确定如何将TabControl(可视化设置)声明为Shared

这是一个指向RegisterJSObject的链接,如果它可以帮助任何: https://github.com/ataranto/CefSharp/blob/master/CefSharp/CefSharp.h#L116

1 个答案:

答案 0 :(得分:1)

  

“我不知道如何在其中共享XAML TabControl   bookmarkControlsObj class ..“

创建一个重载的构造函数,以便在实例化bookmarkControlsObj类时,可以传入对Tab控件的引用。例如:

Public Class bookmarkControlsObj

Private browser_Tabs As TabControl
Public Sub New bookmarkControlsObj()
 //Default constructor
End Sub

Public Sub New bookmarkControlsObj(ByVal tc As TabControl)
 //Overloaded constructor
 browser_Tabs = tc
End Sub

致电代码:

Dim bookmarkCntrlObj As New bookmarkControlsObj(browser_tabs)
bookmarkCntrlObj.follow("aUrl")