[免责声明:我是Visual Basic的新手.]
在WPF中,我有一个包含2个TabItems的TabControl:
第一个TabItem包含一堆URL.
第二个TabItem包含一个DockPanel,其中包含一个cefSharp webView(嵌入了.net的chrome)
当我点击tab1中的url时,它会在tab2中包含的浏览器中加载一个页面... 但是,只有在我通过单击tab2初始化浏览器时它才有效.
在进行一些搜索之后,看起来vb.net不会初始化TabItem中的内容,直到它变得可见.(对?)
所以,我的问题是,如何在后台强制一个未选中的选项卡在加载时初始化其内容?(即.所以我不必先点击选项卡或先切换到它)
编辑:
根据要求,这是相关代码:
相关的XAML由一个名为"mainBox"的DockPanel组成
这是我的"代码隐藏"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)上的浏览器将不会初始化,直到我单击其选项卡或通过脚本更改为其选项卡.希望这有点清除它.
您的代码不使用Windows Forms,TabPage
但也许这可能仍然有用
我们知道,在显示标签页之前,不会创建TabPage中包含的控件,并且在显示标签页之前不会激活这些控件中的任何数据绑定.这是设计使然,您可以
TabPage.Show()
逐个调用方法作为解决方法.
通过MSDN论坛
另外,基于上述想法,您是否尝试过以下操作.
tab2.isEnabled = True tab1.isEnabled = True
要么:
tab2.Visibility = True tab1.Visibility = True
此外,BeginInit方法可能对您的情况有所帮助.