В проекте Windows Phone 7 Silverlight, при свертывании панели, содержащей кнопку, и последующем использовании аппаратной кнопки «назад» для возврата (снова задает видимость для видимой) событие ПЕРВОЕ нажатие теряется.
Это сводило меня с ума на некоторое время.
Вот простой способ воспроизвести, запустить новое приложение Wp7 silverlight и в xaml добавить две панели контента с кнопкой.
<Grid x:Name="ContentPanel" Grid.Row="1" Visibility="Visible">
<Button Content="Change Visibility" Click="ChangeButton_Click"/>
</Grid>
<Grid x:Name="ContentPanel2" Grid.Row="1" Visibility="Collapsed">
<Button Content="Back" Click="BackButton_Click"/>
</Grid>
В коде есть обработчики для обеих кнопок и кнопки аппаратного возврата для простого переключения видимости между двумя панелями.
public MainPage()
{
InitializeComponent();
BackKeyPress += new EventHandler<System.ComponentModel.CancelEventArgs>(MainPage_BackKeyPress);
}
void MainPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
{
if (ContentPanel2.Visibility == Visibility.Visible)
{
ContentPanel.Visibility = Visibility.Visible;
ContentPanel2.Visibility = Visibility.Collapsed;
e.Cancel = true;
}
}
private void ChangeButton_Click(object sender, RoutedEventArgs e)
{
ContentPanel.Visibility = Visibility.Collapsed;
ContentPanel2.Visibility = Visibility.Visible;
}
private void BackButton_Click(object sender, RoutedEventArgs e)
{
ContentPanel.Visibility = Visibility.Visible;
ContentPanel2.Visibility = Visibility.Collapsed;
}
А теперь странная вещь:
- При использовании экранной кнопки переключения переключение работает нормально
- Если вы используете аппаратную кнопку «Назад» для переключения назад, событие ПЕРВОГО нажатия впоследствии будет потеряно!
Это происходит как на эмуляторе, так и на реальном устройстве.
Это ошибка? или что я делаю не так?