1

我已经学习了一周的视觉基础,但我完全陷入了困境。

我在 WPF 的 XAML 中有一个带有 2 个 TabItems 的 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 类中的书签控件Obj 类中更改选项卡(以编程方式/有问题):

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,该WebView包含一个带有Javascript函数的页面——使用RegisterJsObject我可以调用vb.net通过 Javascript 的方法。在这种情况下,我将一个 url 发送到“follow” Sub,它将它加载到第二个 TabItem 中包含的浏览器中,但我希望它在加载之前自动切换到该选项卡——长话短说,RegisterJsObject似乎只能工作如果它包含在一个类中.. 虽然它只是嵌套的,因为那是它结束的地方。

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

如果有帮助,这里是 RegisterJSObject 的链接: https ://github.com/ataranto/CefSharp/blob/master/CefSharp/CefSharp.h#L116

4

1 回答 1

1

“我不知道如何在 bookmarkControlsObj 类中共享 XAML TabControl..”

创建一个重载的构造函数,以便在实例化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")
于 2013-12-30T03:51:05.323 回答