私はインフラジスティックスの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を使用するとメモリが解放されません。これについてもガイドしてください。
ありがとう