首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight Windows Phone 7-使用“硬件后退”按钮后单击“丢失”事件

Silverlight Windows Phone 7-使用“硬件后退”按钮后单击“丢失”事件
EN

Stack Overflow用户
提问于 2011-03-30 07:28:25
回答 2查看 4.6K关注 0票数 2

在Windows 7 Silverlight项目上,当折叠包含按钮的面板,然后使用“硬件后退”按钮返回(再次将可见性设置为可见)时,将丢失第一个单击事件。

这让我发疯有一段时间了。

这里有一个简单的复制方法,启动一个新的Wp7 silverlight应用程序,并在xaml上添加两个带有按钮的内容面板。

代码语言:javascript
复制
    <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>

后面的代码有两个按钮的处理程序,以及硬件回退按钮的处理程序,只需在两个面板之间切换可见性。

代码语言:javascript
复制
    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;
    }

现在奇怪的是:

  • 如果您使用屏幕上的后退按钮,切换就可以了。
  • 如果您使用硬件回退按钮切换回来,那么第一次单击事件之后将丢失!

这既发生在模拟器上,也发生在真正的设备上。

这是个虫子吗?或者我做错什么了?

EN

回答 2

Stack Overflow用户

发布于 2011-03-30 09:24:48

有人叫了Fendors (谢谢!)在app中心论坛上回答了我的问题。他没有找到原因,但找到了一个解决办法:

“当单击”硬件后退“按钮时,我没有完全搞清楚正在发生什么,但我确实找到了解决办法。我最初认为可能存在某种焦点问题,发现如果将内容面板从可见面板设置为折叠面板,则会使其处于良好状态。”

代码语言:javascript
复制
void MainPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) 
        { 
            if (ContentPanel2.Visibility == Visibility.Visible) 
            { 
                ContentPanel2.Visibility = Visibility.Collapsed; 
                ContentPanel.Visibility = Visibility.Visible; 
                ContentPanel.Visibility = Visibility.Collapsed; 
                ContentPanel.Visibility = Visibility.Visible; 

                e.Cancel = true; 
            } 
        } 
票数 2
EN

Stack Overflow用户

发布于 2011-12-10 00:03:38

遇到了同样的问题。似乎是个bug (在解决方法上找到了一个很好的发现)。我为解决方案编写了这个简单的扩展方法:

代码语言:javascript
复制
public static class UIElementExtensions
{
    public static void ShowForReal(this UIElement element)
    {
        element.Visibility = Visibility.Visible;
        element.Visibility = Visibility.Collapsed;
        element.Visibility = Visibility.Visible;
    }
}

然后打电话给ContentPanel.ShowForReal();

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5483239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档