Удалить PivotItems легко, но если вы захотите потом вернуть их обратно, я обнаружил, что заголовки перепутаны и начинают накладываться друг на друга.Это также происходит, если вы установите для параметра Видимость заголовка значение Свернуть, а затем снова сделаете его видимым.
Поэтому я решил свою конкретную проблему, установив непрозрачность каждого нежелательного элемента PivotItem (и его заголовка) на 0.
PivotItem p = (PivotItem)MainPivot.Items.ToList()[indexToHide];
p.Opacity = 0;
((UIElement)p.Header).Opacity = 0;
Тем не менее, это оставляет пробелы, в которых отсутствуют отсутствующие PivotItems.
Для меня пробелы не были проблемой, потому что я хочу удалить элементы только в конце моего PivotItemList, поэтому яполучить пробел между последним и первым PivotItems.Проблема была в том, что я все еще был в состоянии провести к скрытому элементу PivotItem.Чтобы это исправить, я переопределил Pivot.SelectionChanged (), так что всякий раз, когда пользователь перемещается к скрытому PivotItem, код переходит к следующему элементу.Мне пришлось использовать DispatchTimer изнутри SelectionChanged () и фактически перейти к следующему PivotItem из обратного вызова DispatchTimer, поскольку для изменения PivotItem.SelectedIndex нужно быть в потоке пользовательского интерфейса.
private void MainPivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
t.Stop(); //t is my DispatchTimer, set to 100ms
if (MainPivot.SelectedIndex >= mFirstHiddenPivotItemIndex)
{
//move to the first or last PivotItem, depending on the current index
if (mCurrentSelectedPivotItemIndex == 0)
mPivotItemToMoveTo = mFirstHiddenPivotItemIndex - 1;
else
mPivotItemToMoveTo = 0;
t.Start();
}
mCurrentSelectedPivotItemIndex = MainPivot.SelectedIndex;
}
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
MainPivot.SelectedIndex = mPivotItemToMoveTo;
t.Stop();
}