【发布时间】:2011-03-30 07:28:25
【问题描述】:
在 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;
}
现在奇怪的是:
- 如果您使用屏幕上的后退按钮切换效果很好
- 如果使用硬件后退按钮切换回来,那么之后的FIRST点击事件将会丢失!
这在模拟器和真实设备上都会发生。
这是一个错误吗?还是我做错了什么?
【问题讨论】:
-
你把我难住了!在处理后退按键后,我无法弄清楚发生了什么吞下点击事件。大概这是一种过度简化,您实际上并没有尝试提供应用内向后导航,只是改变某种提示的可见性?附言您可能应该覆盖
OnBackKeyPress而不是为 BackKeyPress 事件添加事件处理程序。 -
感谢您的调查。是的,这是一个过于简单的例子。我尝试覆盖 OnBackKeyPress 但它没有任何区别。其他人在 App Hub 论坛上找到了解决方法(我将其粘贴在下面)。
标签: silverlight events windows-phone-7 button visibility