wpf - 在加载时,如何强制TabItem初始化内容?

  显示原文与译文双语对照的内容
56 4

[ 声明:我是 Visual basic 。]的新手。

在一个WPF中,有一个包含 2个TabItems的TabControl:

第一个TabItem包含一组 url 。

第二个TabItem包含包含 cefSharp web view ( 用于. net)的Chromium )的DockPanel

单击tab1中的url时,它会加载包含在tab2中的浏览器中的页。但是,如果我先通过点击初始化浏览器,那么它只会工作。

在进行某些搜索后,VB.Net 看起来不会在一个TabItem中初始化内容,直到它变成可见的。( 对)?

因此,我的问题是,如何强制非选择的选项卡在加载时初始化它的内容,在后台?( IE,所以我不需要先点击标签或者 switch )

编辑:

按照要求,下面是相关代码:

相关的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

因这里,在启动--的默认状态下,tab2 ( web_view2 ) 上的浏览器将不会初始化,直到我单击它的选项卡。希望能把它清理一下。

时间:原作者:0个回答

65 0

你的代码不使用 Windows 窗体'TabPage but但可能会有帮助

如我们所知,在显示之前,不会创建包含在中的控件,直到显示这些控件中的数据绑定。这是按设计的,你可以逐个调用 TabPage.Show() 方法作为解决方法。

通过MSDN论坛

此外,基于上述思想,你是否尝试过以下操作。

tab2.isEnabled = True
tab1.isEnabled = True

或者:

tab2.Visibility = True
tab1.Visibility = True

此外,BeginInit方法可能有助于你的情况。

原作者:
86 0

在表单负载代码的表单加载代码中,我发现了同样的问题:

tabPage2.show()
tabPage3.show()
tabPage4.show()
tabPage5.show()
tabPage1.show()

它涟漪,你永远不会看到页面的变化,但它。其他建议在 Visual Studio 2010中不适用。

原作者:
...