これは好奇心の問題です。私はそのような高価なレイアウトを実際に使用することはありません。
私は次のXamlを持っています
<Window x:Class="WpfApplication16.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowStartupLocation="CenterScreen">
<TabControl ItemsSource="{Binding Items}">
<TabControl.ContentTemplate>
<DataTemplate>
<ScrollViewer>
<ContentPresenter Content="{Binding View}" />
</ScrollViewer>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Window>
および次のコードビハインド
public class Item
{
public FrameworkElement View { get { return m_view; } }
public Item()
{
for (int i = 0; i < 3000; ++i)
{
m_view.Items.Add(new TextBox());
}
}
ItemsControl m_view = new ItemsControl();
}
public partial class MainWindow : Window
{
public List<Item> Items { get; private set; }
public MainWindow()
{
Items = new List<Item>();
for (int i = 0; i < 10; ++i)
{
Items.Add(new Item());
}
DataContext = this;
InitializeComponent();
}
}
したがって、ウィンドウが初期化される前に、すべての TextBox が既に構築されており、30,000 個すべてが構築されていますが、まだ読み込まれていません。最初の選択が行われたときなど、選択が変更されたときにのみロード/アンロードされます。テキストボックスの量が非常に多いため、各アイテムの最初のタブの変更にはしばらく時間がかかると予想されますが、各タブを選択した後、再度タブを移動するとロード/アンロードの間に長い時間がかかるのはなぜですか?
バインディングは行われておらず、ウィンドウのサイズを変更すると、タブを変更するよりもはるかに速く更新されるため、レイアウトの問題ではないと思います。タブを選択する間にメモリ使用量が増加し、10個すべてが選択された後も一定のままで、再度実行されるため、メモリの問題ではないと思います(ロードする必要があるもの)。
また、意図的に視覚化を使用していません。