Я собираюсь попробовать исправление, предложенное @Jimmy Engtröm. Однако я также смог обойти эту проблему, подождав, пока не произойдет загрузка.
<controls:Pivot x:Name="pivotCtrl" Title="{Binding ApplicationTitle}"
Loaded="OnPivotControlLoaded" Opacity="1">
И в коде страницы позади:
private void OnPivotControlLoaded(object sender, RoutedEventArgs e)
{
// Restore the Pivot control's SelectedIndex
if (State.ContainsKey(SelectedPivotIndexKey))
{
pivotCtrl.SelectedIndex = State.Get<int>(SelectedPivotIndexKey);
}
myStoryboard.Begin();
}
Теперь, почему раскадровка? Что ж, когда вы подождете до Load, вы увидите первый пивот, и он хромает. Таким образом, раскадровка делает быстрое появление ... достаточно, чтобы замаскировать исправление. Я попытался просто установить видимость, но это может привести к сбою приложения. Также обратите внимание, что в целях дизайна я оставляю Opacity равным 1 в XAML сводного элемента управления. Вот раскадровка:
<Storyboard x:Name="myStoryboard">
<DoubleAnimation
Storyboard.TargetName="pivotCtrl"
Storyboard.TargetProperty="Opacity"
From="0.0" To="1.0" Duration="0:0:01"
/>
</Storyboard>
Вот вспомогательные функции (помещенные в отдельный файл класса и на которые есть ссылки, например, используя MyApp.Helpers, а файл класса должен ссылаться на System.Collections.Generic)
public static T Get<T>(this IDictionary<string, object> dictionary, string key)
{
return (T)dictionary[key];
}
public static void AddOrReplace<T>(this IDictionary<string, T> dictionary, string key, T item)
{
if (dictionary.ContainsKey(key))
dictionary.Remove(key);
dictionary.Add(key, item);
}
Опять же, это не самое лучшее исправление, но оно работает хорошо, и появление на самом деле - это то, что я мог бы использовать в другом месте.