Замедление переключения TabItems
У меня есть TabControl с несколькими TabItems. Иногда я испытываю медленное переключение времени загрузки с одной вкладки на другую. Первой мыслью была служба, однако приложение не вызывает службу при переключении вкладки.
<TabControl Visibility="{Binding MenuVisible}" Name="MenuControl" Grid.Row="1" >
<TabItem Header="Business Rules Alerts" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="250" />
</Grid.RowDefinitions>
<ContentControl cal:RegionManager.RegionName="GraphAlertsRegion" Margin="0" />
<!-- Grid for UserListRegion and EventListRegion -->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<!-- EventList region -->
<ContentControl Grid.Column="0" cal:RegionManager.RegionName="EAlertsListRegion" Margin="0" />
</Grid>
</Grid>
</TabItem>
<TabItem Header="Business Rules">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height=".5*" />
<RowDefinition Height=".5*" />
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" cal:RegionManager.RegionName="BusinessRulesListRegion" Margin="0" />
<Grid Grid.Row="1">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl cal:RegionManager.RegionName="BusinessRulesWizardRegion" Margin="0" />
</ScrollViewer>
</Grid>
</TabItem>
</TabControl>
Есть ли способ улучшить производительность? Особенно,
<ContentControl cal:RegionManager.RegionName="GraphAlertsRegion" Margin="0" />
это TreeView плюс несколько графиков (<charting:Chart.Series>
), который является более медленной вкладкой. Я убедился, что код не вызывает сервис, когда мы переключаемся на эту вкладку. Так что еще может быть причиной задержки?
1 ответ
Это странное стандартное поведение TabControl - он выгружает элементы во время переключения, поэтому вам нужно немного расширить его, чтобы сохранить кэшированные TabItems во время переключения, подробнее об этом можно узнать в примере из этой статьи: предотвращение уничтожения дочерних элементов управления вкладками WPF