在Windows Phone 7 Silverlight项目中,当折叠包含按钮的面板,然后使用硬件返回按钮返回(再次设置可见性)时,第一次点击事件丢失。Silverlight Windows Phone 7 - 使用硬件后退按钮后丢失的按钮事件
这让我疯狂了一阵子。
这里是一个简单的方法来重现,启动一个新的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;
}
现在奇怪的事情:
- 如果你使用屏幕上如果使用硬件后退按钮返回键切换工作正常
- 切换回,则首先单击事件事后将失去!
这发生在仿真器和真实设备上。
这是一个错误?或者我做错了什么?
你难住我了!在处理后退按键之后,我无法弄清楚发生了什么事情来吞下点击事件。大概这是一个过度简化,你实际上并没有试图提供应用内向后导航,只是改变某种提示的可见性?附:您应该重写'OnBackKeyPress'而不是为BackKeyPress事件添加事件处理程序。 – 2011-03-30 07:59:35
感谢您的关注。是的,这是一个过分简化的例子。我试着重写OnBackKeyPress,但没有任何区别。其他人在App Hub论坛上找到了解决方法(我在下面粘贴了它)。 – Habitante 2011-03-30 09:29:35