Это действительно странная ошибка. Понятия не имею, почему это могло происходить. Я знаю, что опубликовать это здесь - занятие непростое, но у меня нет других идей.
У меня есть два ListBox
, которые действуют как меню.
<ListBox Margin="56,8,15,0" FontSize="64"
ItemsSource="{Binding FavoriteSections}"
SelectionChanged="MenuList_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Remove" Click="FavoritesContextMenuItem_Click" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<TextBlock Text="{Binding DisplayName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<ListBox x:Name="sectionList" Margin="56,8,15,0" FontSize="64"
SelectionChanged="MenuList_SelectionChanged"
ItemsSource="{Binding SectionViewModels}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Add to favorites" Click="SectionContextMenuItem_Click" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<TextBlock Text="{Binding DisplayName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Ошибка существует повсюду. оба из них.
Когда выбор изменяется в любом меню, вызывается этот метод:
void MenuList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count == 0)
{
return;
}
Uri page = null;
object selected = e.AddedItems[0];
if (selected is NavigableItem)
{
NavigableItem selectedItem = (NavigableItem)selected;
page = selectedItem.Page;
}
else if (selected is SectionViewModel)
{
SectionViewModel selectedVM = (SectionViewModel)selected;
page = selectedVM.Section.Page;
}
Debug.Assert(page != null, "What is the type of `selected`?");
// if I comment out this line, the problem goes away:
NavigationService.Navigate(page);
ListBox selectedBox = (ListBox)sender;
selectedBox.SelectedIndex = -1;
}
Если я закомментирую строку NavigationService.Navigate ()
, проблема исчезнет. Если я заменю строку другим URI, проблема останется.
Примерно в 70% случаев, когда я нажимаю на элемент меню, содержимое перескакивает по всей странице. (Остальные 30%, ошибок не возникает.) Это происходит слишком быстро, чтобы увидеть, что на самом деле происходит, но разные элементы пользовательского интерфейса накладываются друг на друга.
Это происходит только в первый раз, когда я щелкаю что-то в этих меню в течение срока службы приложения. Если я нажму «назад», а затем снова выберу пункт меню, проблемы не возникнет.
Что здесь может происходить? Я действительно понятия не имею,. В коде программной части нет метода OnNavigatedFrom
, поэтому я не думаю, что это проблема.
Я использую Silverlight для Windows Phone 7
Обновление : таинственным образом , Я не могу воспроизвести это в отладчике - только после развертывания приложения и его запуска в эмуляторе без подключения. ???
Обновление 2 : ошибка появляется, когда NavigationService.Navigate ()
также вызывается из обработчика события Click
кнопки:
<Button Content="Foo" Click="Button_Click" Grid.Row="0"/>
private void Button_Click(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/Views/sections.xaml?section=43", UriKind.Relative));
}
Похоже, ошибка связана с навигацией, не элемент пользовательского интерфейса, использованный для запуска вызова.
Обновление 3 : Еще больше странностей. По-прежнему не удается воспроизвести приложение, пока подключен отладчик. Если я сделаю так, чтобы индикатор выполнения загрузки всегда был свернут, ошибка исчезнет:
<ProgressBar x:Name="LoadingProgressBar"
IsIndeterminate="True"
Visibility="Collapsed"
Style="{StaticResource PerformanceProgressBar}"
VerticalAlignment="Top"/>
В качестве альтернативы, закомментировав эту строку в коде программной части, ошибка исчезнет:
LoadingProgressBar.Visibility = Visibility.Collapsed;
Я действительно не понимаю, что здесь происходит. Эта строка кода не выполняется при переходе по странице.
Вот полный код XAML элемента управления, в котором происходит сбой:
<ProgressBar x:Name="LoadingProgressBar"
IsIndeterminate="True"
Visibility="Collapsed"
Style="{StaticResource PerformanceProgressBar}"
VerticalAlignment="Top"/>
<TextBlock x:Name="DownloadFailed"
Visibility="Collapsed"
Style="{StaticResource disabledText}"
Margin="56,8,8,-8" >
FooBar.com could not be reached. Do you have a network connection?
</TextBlock>
<ListBox x:Name="sectionList" Margin="56,8,15,0" FontSize="64"
SelectionChanged="MenuList_SelectionChanged"
ItemsSource="{Binding SectionViewModels}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu>
<toolkit:MenuItem Header="Add to favorites" Click="SectionContextMenuItem_Click" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<TextBlock Text="{Binding DisplayName}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</controls:PivotItem>