隐藏应用程序栏时,WP7全景控制滑动滞后

时间:2011-07-05 23:03:19

标签: windows-phone-7 panorama-control application-bar

我有一个带有全景控件的Windows Phone应用程序。

Panorama目前有两页。

一个页面应该有一个带有按钮的可见应用程序栏,另一个页面不应该。

我使用panorama的SelectionChanged事件来查找ApplicationBar的IsVisible属性。

private void Panorama_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            ApplicationBar.IsVisible = Panorama.SelectedIndex == 0;
        }

我得到的功能是所希望的,但有了这样的行为,我得到了我的全景的可怕的滞后(一瞬间冻结滑动动画)。这可能是因为UI线程必须操作Windows Phone“本机”应用程序栏。

避免此问题的最佳方法是什么?

我应该在一个单独的线程中调用ApplicationBar.IsVisible = Panorama.SelectedIndex == 0;吗?或者我应该使用项目的ManipulationStarted和ManipulationCompleted事件来隐藏应用栏?

感谢。

6 个答案:

答案 0 :(得分:1)

通过删除/添加应用程序栏图标而不是隐藏应用程序栏本身,我能够获得平滑的动画。

答案 1 :(得分:1)

尝试将应用栏的不透明度设置为0.999999,而不是默认值(1.0)。它应该有用。

答案 2 :(得分:1)

万一其他人遇到这个问题,datou.guo是对的。不透明度的详细信息在此处解释:AppBar Documentation

他们建议使用0,.5或1作为应用栏不透明度。当不透明度为1时,如果App Bar发生更改,页面实际上会调整大小,这可以解释滞后。如果不透明度为.5,则不会发生。他们没有特别提到任何其他不透明度值,但我在0.99尝​​试了它,它确实防止了滞后。

请注意,您可能需要更新布局以在页面底部留出一些边距,因为当应用栏透明时,它不会占用页面上的空间。

答案 3 :(得分:0)

在单独的线程中运行该段代码将无济于事,因为在一天结束时,您将需要使用Deployment.Current.Dispatcher.BeginInvoke()在UI线程上应用效果(否则您将获得交叉线程异常)。

但是对于这个滞后的问题,我会说尝试在200毫秒的延迟之后改变可见性。他可能会帮忙。

答案 4 :(得分:0)

您应该将应用程序设计为不使用与全景控件相同页面上的应用程序栏。

这两者并非旨在一起使用。这是出于设计和技术原因。 (因为出于设计原因,它们永远不应该被用于它们,因此在使用它们时存在技术问题,这两者都是非常不可理解的。)你发现了一个这样的问题。

如果您有关于用户应与之交互的全景项目的内容,请将控件移动到该项目或单独的页面上(如果通过选择该内容进行链接)。

<强>更新
在任何人指出之前 - 一些中心(办公室和人)在当前的芒果构建中结合了全景图和应用程序栏。 Micorsoft对此没有官方评论。 (我刚刚问过。)Mango的设计指南尚未发布。在它们出现之前,不可能再有任何信息 包含芒果测试版SDK的全景模板仍然包含一条注释,表明您不应该将应用程序栏和全景图组合在一起。

答案 5 :(得分:0)

我在这里找到了针对您的案例Panorama Control Design Guidelines for Windows Phone的建议 这表示如果在Panorama中使用应用程序栏,请将“模式”设置为“最小化”。此模式专门用于最大化Panorama页面上的屏幕空间。