Как отключить загрузку PivotItem, пока я его не выберу? (UWP C #)

#c# #xaml #uwp

#c# #xaml #uwp

Вопрос:

Мне нужно использовать Pivot, но без загрузки всех страниц во всех PivotItems. Необходимо загружать / перезапускать каждую страницу в PivotItem только тогда, когда я выбираю этот конкретный PivotItem.

Я попробовал, один за другим, все функции, которые предоставляет Xaml, чтобы выполнять действие только при нажатии сводного элемента, но безуспешно.

 <Pivot x:Name="XmlConfigPivot">
            <PivotItem Header="Layout">
                <Frame>
                    <xml_config:Layout_Tab/>
                </Frame>
            </PivotItem>
            <PivotItem Header="stub_tab">
                <Frame>
                    <xml_config:Stub_Tab/>
                </Frame>
            </PivotItem>
</Pivot>
 

Как сделать так, чтобы «xml_config:Layout_Tab» загружался только тогда, когда я выбираю его сводный элемент?

Комментарии:

1. Здесь та же проблема, похоже, что это поведение элемента управления Pivot по умолчанию. Я не пробовал, но, возможно, если вы добавите их программно, а не в XAML, вы могли бы выбрать, когда их загружать.

Ответ №1:

Как сказал @Bruno, вы можете напрямую загружать каждую страницу с помощью программирования. Вам просто нужно зарегистрировать событие SelectionChanged для Pivot и добавить некоторую логику кода для его достижения.

Ниже приведен простой пример кода для справки:

 <Pivot x:Name="XmlConfigPivot" SelectionChanged="XmlConfigPivot_SelectionChanged">
        <PivotItem Header="Layout">
            <Frame>
            </Frame>
        </PivotItem>
        <PivotItem Header="stub_tab">
            <Frame>
            </Frame>
        </PivotItem>
</Pivot>
 
 private void XmlConfigPivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    PivotItem item = ((sender as Pivot).SelectedItem) as PivotItem;
    string header = item.Header.ToString();
    Frame frame = item.Content as Frame;
    switch (header)
    {
            case "Layout": frame?.Navigate(typeof(page1)); break;
            case "stub_tab": frame?.Navigate(typeof(page2)); break;
    }
}
 

Комментарии:

1. что я бы сделал, так это вместо переключения между «заголовком», я бы предпочел использовать тег «x: Name».

2. Теперь у меня проблема в том, что каждый раз, когда я возвращаюсь к этой вкладке, она «запоминает» материал с последнего посещения. Есть ли шанс, что я смогу каждый раз создавать новый макет?