1

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

全景图目前有两个页面。

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

我使用全景图的 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 事件来隐藏应用栏?

谢谢。

4

6 回答 6

1

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

于 2011-07-31T23:03:07.520 回答
1

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

于 2012-08-02T01:21:46.210 回答
1

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

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

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

于 2013-06-28T01:13:11.280 回答
0

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

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

于 2011-07-06T00:29:48.550 回答
0

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

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

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

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

于 2011-07-06T10:14:01.350 回答
0

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

于 2012-05-22T20:21:23.067 回答