[免责声明:我是Visual Basic的新手。]
在WPF中,我有一个包含2个TabItems的TabControl:
第一个TabItem包含一堆URL。
第二个TabItem包含一个DockPanel,其中包含一个cefSharp webView(为.net嵌入的铬)
当我点击tab1中的网址时,它会在tab2中包含的浏览器中加载一个页面... 但是,只有在我通过点击tab2初始化浏览器时才能使用。
在进行一些搜索之后,看起来vb.net不会初始化TabItem中的内容,直到它变得可见。 (对吧?)
所以,我的问题是,如何在后台强制一个未选中的标签在加载时初始化其内容? (即。所以我不必先点击标签或先切换到它)
修改
根据要求,这是相关代码:
相关的XAML由一个名为“mainBox”
的DockPanel组成<DockPanel Name="mainBox" Width="Auto" Height="Auto" Background="#afe0ff" />
这是我的“代码隐藏”vb脚本:
Class MainWindow : Implements ILifeSpanHandler, IRequestHandler
Shared web_view1 As CefSharp.Wpf.WebView
Shared web_view2 As CefSharp.Wpf.WebView
Public Sub init(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Loaded
'This is in a DockPanel created on the xaml named mainBox
' set up tabControl:
Dim browserTabs As New TabControl()
browserTabs.BorderThickness = Nothing
Dim tab1 As New TabItem()
tab1.Header = "My Tab"
Dim tab2 As New TabItem()
tab2.Header = "Browser"
Dim tab1Content As New DockPanel()
Dim tab2Content As New DockPanel()
tab1.Content = tab1Content
tab2.Content = tab2Content
browserTabs.Items.Add(tab1)
browserTabs.Items.Add(tab2)
mainBox.Children.Add(browserTabs)
' set up browsers:
Dim settings As New CefSharp.Settings()
settings.PackLoadingDisabled = True
If CEF.Initialize(settings) Then
web_view1 = New CefSharp.Wpf.WebView()
web_view1.Name = "myTabPage"
web_view1.Address = "http://stackoverflow.com/"
web_view2 = New CefSharp.Wpf.WebView()
web_view2.Name = "browserPage"
web_view2.Address = "https://www.google.com"
web_view2.LifeSpanHandler = Me
web_view2.RequestHandler = Me
AddHandler web_view2.PropertyChanged, AddressOf web2PropChanged
tab1Content.Children.Add(web_view1)
tab2Content.Children.Add(web_view2)
End If
End Sub
End Class
因此,在默认状态下,tab1在启动时显示 - tab2(web_view2)上的浏览器将不会初始化,直到我单击其选项卡或通过脚本更改为其选项卡。希望这有点清除它。
答案 0 :(得分:5)
您的代码不使用Windows窗体“TabPage
,但这可能仍有帮助
众所周知,Controls contained in a TabPage are not created until the tab page is shown和这些控件中的任何数据绑定都不是 激活,直到显示标签页。这是设计的,你可以 逐个调用
TabPage.Show()
方法作为解决方法。
另外,根据上述想法,您是否尝试过以下内容。
tab2.isEnabled = True
tab1.isEnabled = True
或者:
tab2.Visibility = True
tab1.Visibility = True
此外,BeginInit Method可能对您的情况有所帮助。
答案 1 :(得分:2)
我遇到了同样的问题,但发现如果我使用tabpage的名称并在表单加载代码上显示(tabName1.show()),则每个页面以我想要显示的那个结尾,它会初始化:
tabPage2.show()
tabPage3.show()
tabPage4.show()
tabPage5.show()
tabPage1.show()
它涟漪通过,你永远不会看到页面改变,但它的工作原理。其他建议在Visual Studio 2010中对我没有用。