如何以编程方式设置WP7中选定的Panorama项目

CAC*_*lan 13 c# silverlight xaml windows-phone-7

我在WP7应用程序中使用全景控件.其中一个PanoramaItem将您带到另一个页面,然后允许您通过EmailComposeTask发送电子邮件.如果您未选择发送电子邮件并按后退按钮,则Panorama将返回上次选择的项目.但是,如果您选择发送电子邮件(因此离开应用程序),它将不会返回先前选择的PanoramaItem.相反,它返回到Panorama中的第一个项目.我试着跟踪所选索引并设置它,但是我收到一条错误,说SelectedIndex不可设置.这已在MSDN文档中得到确认http://msdn.microsoft.com/en-us/library/microsoft.phone.controls.panorama.selectedindex%28VS.92%29.aspx

有没有办法在全景图上手动设置所选索引/项目?如果没有,即使用户离开应用程序撰写电子邮件,有没有办法记住所选内容?

Ala*_*tts 34

我不确定您是否可以以编程方式将动画强制转换为另一个动画PanoramaItem,但您可以更改Panorama.DefaultItem.

所以你可能有3个PanoramaItem并且在OnNavigatedTo()处理程序上,通过以下方式更改默认项:

panoramaControl.DefaultItem = panoramaControl.Items[indexToSet];
Run Code Online (Sandbox Code Playgroud)

当你从墓碑中恢复时,这应该会有所帮助.


Mic*_*k N 7

您可以尝试在此主题中由Silicon Shark发布的解决方案.它注意到工作,但只在初始显示 - 这不应该是你在墓碑后恢复状态的要求的问题.

如何以编程方式设置Panorama控件中的可见项?

您可以从全景图的SelectedIndex属性中获取当前活动的页面.

不幸的是,设置DefualtItem只是解决这个问题的近似值,您可能已经发现了这个问题.

编辑:请注意,设置DefaultItem会更改全景图的哪一页是第一页.这是一个微妙的差异,但你会看到它是如何重要的看标题的位置和背景图像的环绕.


Elw*_*00t 5

这是一个解决方案.它确实按预期工作,不会重新排列全景,因此您的用户界面是一致的.

pan.SetValue(Panorama.SelectedItemProperty, panoramaItem);
Panorama temp = pan;
LayoutRoot.Children.Remove(pan);
LayoutRoot.Children.Add(temp);
LayoutRoot.UpdateLayout();
Run Code Online (Sandbox Code Playgroud)

这不是一个完美的解决方案,因为它不像全景应该滑动得很好,而且它可能效率不高,但另一方面你没有改变默认项目,所以你的用户界面保持一致.