5

[免責事項: Visual Basic は初めてです。]

WPF には、2 つの TabItems を含む TabControl があります。

最初の TabItem には、多数の URL が含まれています。

2 番目の TabItem は、cefSharp webView (.net に埋め込まれたクロム) を含む DockPanel で構成されます。

tab1 の URL をクリックすると、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) のブラウザーは、タブをクリックするか、スクリプトを介してそのタブに変更するまで初期化されません。これで少しは解決することを願っています。

4

2 に答える 2

3

私は同じ問題を抱えていましたが、タブページの名前を使用し、表示したいページで終わる各ページのフォームロードコードで (tabName1.show()) を表示すると、初期化されることがわかりました。

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

さざ波が通り、ページが変化することはありませんが、機能します。他の提案は、Visual Studio 2010 ではうまくいきませんでした。

于 2014-08-31T01:07:28.593 に答える