wpf 将WebView2控件添加到选项卡项并导航到网站

nr9pn0ug  于 2023-02-13  发布在  其他
关注(0)|答案(1)|浏览(374)

我正在摆弄微软的WebView 2控件,创建了一个简单的wpf应用程序,没有什么花哨的:只有一个带有标签控件的主窗口。每个标签都有自己的用户数据目录。
然后,我添加了一个方法来示例化一个选项卡项和一个web视图,然后将该控件添加到MainWindow中的选项卡控件。
到目前为止,我有什么-这是工作(但...):

private async void AddTab(string serviceName, string serviceUrl)
{
    TabItem tabItem = new TabItem();
    tabItem.Name = serviceName;
    tabItem.Header = serviceName;
    myTabControl.Items.Add(tabItem);

    // Create a unique user data directory for this tab
    // and keep it "portable", a.k.a. in the programm directory
    string userDataDirectory = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + "\\Sessions\\" + serviceName;

    // Create a new WebView2 control and pass custom user data directory
    WebView2 webView = new WebView2() { CreationProperties = new CoreWebView2CreationProperties() { UserDataFolder = userDataDirectory } };

    // set the source address
    webView.Source = new Uri(serviceUrl);
    // add webview to tab content
    tabItem.Content = webView;

    // Initialize the WebView2 control
    await webView.EnsureCoreWebView2Async();
}

这是按预期工作的。但是现在,webview的内容只有在我点击标签时才加载。我不知道如何让标签在后台加载,这样当我点击标签时,网站就已经加载了。
我发现了一个关于stackoverflow的例子,但是对于我想要完成的来说太复杂了。我的任务实验把我带到了一个疯狂的世界,不能再访问我的线程了。这样的代码远远超出了我的理解范围(目前)。我还在学习。

jq6vz3qz

jq6vz3qz1#

我会尝试在xaml中定义选项卡项。
tabcontrol是一个itemscontrol.我通常会把itemssource绑定到一个视图模型的集合上,然后把它们模板化到ui中.如果你这样绑定这些项,你只能示例化其中一个被选中的项.在xaml中定义tabitem似乎意味着它们都被示例化了.这明显要慢一些.
如果你愿意,你可以在代码中添加其他的标签,但是我会先检查一些在xaml中定义的标签会发生什么。
另一个你可以尝试的方法是在主视图中隐藏webview2控件。在窗口呈现时立即导航到这些固定的url。将它们移出窗口,并在选择选项卡时移入你的选项卡项,设置isvisible true。然后你只会引起呈现。
顺便说一句,webview2是一个chromium edge浏览器的 Package 器,它显示了一些奇怪的行为,比如它可以溢出父容器。

相关问题