我在学习视觉基础方面需要一周的时间,而且我完全陷入困境。
我在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
答案 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")