Замедление переключения 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

Другие вопросы по тегам