4

私はインフラジスティックスのTabGroupPaneを使用しています。その場合、ContentPaneがアクティブなときにユーザーコントロールをロードし、以前にアクティブだったタブコンテンツを削除します。これが私のコードXamlです:

<igDock:DocumentContentHost>
                <igDock:SplitPane>
                    <igDock:TabGroupPane x:Name="tabMainMenu" SelectionChanged="xamMainTab_SelectionChanged" AllowDrop="False">
                        <igDock:ContentPane x:Name="tabItem1"  Header="Item 1"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem2"  Header="Item 2"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem3"  Header="Item 3"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem4"  Header="Item 4"></igDock:ContentPane>
                        <igDock:ContentPane x:Name="tabItem5"  Header="Item 5"></igDock:ContentPane>
                    </igDock:TabGroupPane>
                </igDock:SplitPane>
            </igDock:DocumentContentHost>

とコードbehide側

private void xamMainTab_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {             
        if (e.RemovedItems.Count > 0 && null != e.RemovedItems[0] as ContentPane)
        {
            (e.RemovedItems[0] as ContentPane).Content = null;
        }
        GC.Collect();
        ContentPane selectedTab = this.tabMainMenu.SelectedItem as ContentPane;         
        BindContainer(selectedTab.Name);
    }
private void BindContainer(string item)
    {
        switch (item)
        {
            case "tabItem1":
                this.tabItem1.Content = new UserControls.UserControl1();
                this.tabMainMenu.SelectedItem = this.tabItem1;
                break;
            case "tabItem2":
                this.tabItem2.Content = new UserControls.UserControl2();
                this.tabMainMenu.SelectedItem = this.tabItem2;
                break;
            case "tabItem3":                    
        this.tabItem3.Content = new UserControls.UserControl3();
                this.tabMainMenu.SelectedItem = this.tabItem3;
                break;
            case "tabItem4":
                this.tabItem4.Content = new UserControls.UserControl4();
                this.tabMainMenu.SelectedItem = this.tabItem4;
                break;
            case "tabItem5":                    
                this.tabItem5.Content = new UserControls.UserControl5();
                this.tabMainMenu.SelectedItem = this.tabItem5;
                break;
            default:
                this.tabItem1.Content = new UserControls.UserControl1();
                this.tabMainMenu.SelectedItem = this.tabItem1;
                break;
        }
    }

ここでは、最後のアイテムのコンテンツをnullに設定します。(e.RemovedItems [0] as ContentPane).Content = null; しかし、その場合、memory(size)は解放されません。次に、GC.Collectを使用します。今回は、一部のメモリが解放されます。これはメモリを解放するための書き込み方法ですか、それとも他の方法でそれを参照してください。また、この場合、ユーザーコントロールにWebBrowserが含まれていると、GC.collectを使用するとメモリが解放されません。これについてもガイドしてください。

ありがとう

4

0 に答える 0