Я работаю над приложением WPF с интерфейсом MDI с вкладками.По сути, пользователь щелкает пункт меню, и это создает и добавляет новую вкладку.Новый «MyUserControl» создается и устанавливается в качестве содержимого вкладки.Примерно так:
private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
this.TabControl.Items.Add(new TabItem() { Content = new MyUserControl() });
}
MyUserControl состоит из нескольких вложенных элементов управления (около 8 элементов управления).Когда этот подход привязан к фактическому контролю, производительность неприемлема.
Если я не схожу с ума, я заметил, что при объявлении вкладки и контента в представлении производительности наблюдается гораздо меньше.xaml заранее и просто переключите свойство Visibility элемента вкладки:
<Controls:TabControl x:Name="TabControl" Grid.Row="1">
<Controls:TabControl.Items>
<Controls:TabItem x:Name="MyTabItem" Visibility="Collapsed">
<Controls:MyUserControl x:Name="MyUserControl" />
</Controls:TabItem>
</Controls:TabControl.Items>
</Controls:TabControl>
и
private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
this.MyTabItem.Visibility = Visibility.Visible;
}
Кто-нибудь может объяснить это?Действительно ли более эффективно создавать «визуальное дерево» в xaml, а не программно?Или прирост производительности во втором подходе был перенесен на общую загрузку формы вместо того, чтобы щелкать по пункту меню, как при первом подходе?
Второй подход определенно работает намного лучше.Есть мысли?