#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. Теперь у меня проблема в том, что каждый раз, когда я возвращаюсь к этой вкладке, она «запоминает» материал с последнего посещения. Есть ли шанс, что я смогу каждый раз создавать новый макет?