繁体   English   中英

WP7 Panorama 控制隐藏应用栏时滑动滞后

[英]WP7 Panorama control sliding lagging when hiding Application Bar

我有一个带有全景控制的 Windows 电话应用程序。

全景图目前有两个页面。

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

我使用全景图的 SelectionChanged 事件来更改 ApplicationBar 的 IsVisible 属性。

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

我得到的功能是符合要求的,但是由于这种行为,我的全景图出现了可怕的滞后(滑动动画的瞬间冻结)。 这可能是因为 UI 线程必须操作非常 windows 手机“本机”应用程序栏。

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

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

谢谢。

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

以防万一其他人遇到这种情况,大头国是对的。 关于不透明度的详细信息在这里解释: AppBar 文档

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

请注意,您可能必须更新布局以在页面底部留出一些边距,因为应用栏在透明时不再占用页面空间。

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

在这里,我为您的案例找到了 Windows 电话全景控制设计指南的建议,它告诉您如果在全景图中使用应用程序栏,请将模式设置为最小化。 此模式专门设计用于最大化全景页面上的屏幕空间。

在单独的线程中运行那段代码将无济于事,因为最终您将需要使用 Deployment.Current.Dispatcher.BeginInvoke() 将效果应用于 UI 线程(否则您将获得跨线程异常) .

但是对于这个滞后的问题,我会说尝试在延迟 200 毫秒后更改可见性。 Thay 可能会有所帮助。

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

两者并非设计为一起使用。 这是出于设计和技术原因。 (因为出于设计原因,它们永远不应该一起使用,所以在使用它们时会出现技术问题,这是非常不可能解决的。)您已经发现了一个这样的问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM