WebBrowser控件和内存的新实例

时间:2014-01-15 19:00:57

标签: c# wpf tabcontrol tabitem

我正在创建一个最多包含10个标签的标签控件。我想为每个标签添加一个Web浏览器。用户可以控制显示的标签数量。通过对每个选项卡使用相同的控件来节省内存,或者为每个选项卡分别进行控制。以下是我正在尝试做的事情:

    private System.Windows.Forms.WebBrowser webBrowser1 = null;
    private System.Windows.Forms.WebBrowser webBrowser2 = null;
    private System.Windows.Forms.WebBrowser webBrowser3 = null;

    // Display one tab
    switch (tabCount)
    {
            case 1:
                // tab 1
                tabItem1.Visibility = System.Windows.Visibility.Visible;
                webBrower1 = new WebBrowser();
                webBrowser1.Navigate(txtBoxServerURL.Text));
                // tab 2
                tabItem1.Visibility = System.Windows.Visibility.Collapsed;
                webBrower2 = null;
                break;
                // process remaining tabs and set each webBrowser(2,3,4...) to null
            case 2:
                // tab 1
                tabItem1.Visibility = System.Windows.Visibility.Visible;
                webBrower1 = new WebBrowser();
                webBrowser1.Navigate(txtBoxServerURL.Text));
                // tab 2
                tabItem1.Visibility = System.Windows.Visibility.Visible;
                webBrower2 = new WebBrowser();
                webBrowser2.Navigate(txtBoxServerURL.Text));
                break;
                // tab 3
                tabItem1.Visibility = System.Windows.Visibility.Collapsed;
                webBrower3 = null;
                // process remaining tabs and set each webBrowser(3,4,5...) to null
            // define remaining cases
            default:
                break;
  }

或者我应该为所有标签使用一个WebBrowser控件和一个WindowsFormsHost控件:

        for (int i = 0; i < comboCount; i++)
        {
            string title = "Tab Page " + (i + 1);
            TabItem tabItem = new TabItem();
            tabItem.Name = title;
            tabItem.Items.Add(tabPage);  
            System.Windows.Forms.WebBrowser.WebBrowser webBrowser = new System.Windows.Forms.WebBrowser.WebBrowser();
            webBrowser.Navigate(txtBoxServerURL.Text); 
            windowsFormHost.Child = webBrowser;           
        }

很抱歉,如果有任何错误。我没有编译就编写了这个示例。此外,我在我的WPF应用程序中使用System.Windows.Form WebBrowser控件。我不得不使用WPF WebBrowser控件获取网页标题。希望这一切都有意义。谢谢。

大卫

1 个答案:

答案 0 :(得分:1)

for循环中维护要容易得多。所以第二部分代码将更加可维护。

我还建议您深入了解WPF and MVVM.使用浏览器控件的视图可以很容易地重用和实例化。此模式允许您抽象出您的视觉元素,并只关注您想要呈现的数据,在这种情况下,您的网页。