WPF TabControl 内存问题

3
如果我有以下TabControl,并且一切正常,当我切换到第二个tabitem时,它只是显示,没有任何问题。
<TabControl>
   <TabItem> //datagrid </TabItem>
   <TabItem> //datagrid2 </TabItem>
<TabControl>

但是如果我有这个XAML,当我点击第二个tabitem时,内存就会失控

<TabControl>
   <TabItem> //datagrid </TabItem>
<TabControl>
<TabControl>
   <TabItem> //datagrid2 </TabItem>
<TabControl>

我错过了什么?

1
您的问题似乎缺少 XAML.. 我已经为您进行了修复。 - Arcturus
1
你需要展示更多的XAML代码 - 我们需要看到你在TabControls周围使用的Panel。凭感觉,我会说DataGrid2的TabControl被放置在一个高度为"Auto"或者 "Star"(即*)的网格行中。 - Goblin
是的,你说得对,我应该将它设置为固定高度吗? - TCoder
那个有效,请将其发布为答案,以便我可以标记它正确。谢谢! - TCoder
@Goblin,请将您的答案作为评论,这样您将获得声望,并帮助用户更快地找到问题。 - Shimmy Weitzhandler
2个回答

1

需要更多的xaml / 代码来回答这个问题(另一个直觉性的答案):

您是否知道WPF中的TabControl会动态卸载TabItems中的可视树(及其内容),一旦它们被切换到视图之外,并且其中的可视树/数据可以被垃圾回收?通过按照第二个代码片段在两个单独的TabControl中托管两个DataGrid,您禁用了此功能:

<TabControl>
   <TabItem> //datagrid </TabItem>
<TabControl>
<TabControl>
   <TabItem> //datagrid2 </TabItem>
<TabControl>

在上述代码中,您实际上要求.NET框架同时将两者加载到内存中。
<TabControl>
   <TabItem> //datagrid </TabItem>
   <TabItem> //datagrid2 </TabItem>
<TabControl>

在同一个TabControl上托管两个DataGrid的示例中(如上所示),当您切换选项卡时,隐藏的DataGrid所需的内存可以被垃圾回收。


0

根据要求发布答案 :-).

您需要展示更多的XAML代码 - 我们需要看到您在TabControl周围使用的Panel - 直觉告诉我,DataGrid2TabControl被放置在一个Grid Row中,其高度为"Auto""*"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接