我在WP7应用程序中使用全景控件。其中一个PanoramaItem将您带到另一个页面,然后允许您通过EmailComposeTask发送电子邮件。如果您未选择发送电子邮件并按后退按钮,则Panorama将返回上次选择的项目。但是,如果您选择发送电子邮件(因此离开应用程序),它将不会返回到先前选择的PanoramaItem。相反,它返回到Panorama中的第一个项目。我试着跟踪所选索引并设置它,但是我收到一条错误,说SelectedIndex不可设置。这在MSDN文档http://msdn.microsoft.com/en-us/library/microsoft.phone.controls.panorama.selectedindex%28VS.92%29.aspx
上得到了确认有没有办法在全景图上手动设置所选索引/项目?如果没有,是否有办法记住所选内容,即使用户离开应用程序撰写电子邮件?
答案 0 :(得分:34)
我不确定您是否可以通过编程方式将动画强制转换为其他PanoramaItem
,但您可以更改Panorama.DefaultItem。
所以你可能有3个PanoramaItem
并在OnNavigatedTo()
处理程序上,通过以下方式更改默认项目:
panoramaControl.DefaultItem = panoramaControl.Items[indexToSet];
当你从墓碑中恢复时,这应该会有所帮助。
答案 1 :(得分:7)
您可以尝试在此主题中由Silicon Shark发布的解决方案。它注意到工作,但只在初始显示 - 这不应该是你在墓碑后恢复状态的要求的问题。
How to programmatically set the visible item in a Panorama control?
您可以从全景图的SelectedIndex属性中获取当前活动的页面。
不幸的是,设置DefualtItem只是解决这个问题的近似值,您可能已经发现了这个问题。
修改:请注意,设置DefaultItem会更改全景图的哪一页是第一页。这是一个微妙的差异,但你会看到标题的位置和背景图像的环绕是如何重要的。
答案 2 :(得分:5)
这是一个解决方案。它确实按预期工作,不会重新排列全景图,因此您的用户界面是一致的。
pan.SetValue(Panorama.SelectedItemProperty, panoramaItem);
Panorama temp = pan;
LayoutRoot.Children.Remove(pan);
LayoutRoot.Children.Add(temp);
LayoutRoot.UpdateLayout();
这不是一个完美的解决方案,因为它不像全景应该滑动得很好,而且它可能效率不高,但另一方面你没有改变默认项目,所以你的用户界面保持一致。
答案 3 :(得分:3)
我测试了此处列出的解决方案但没有成功。这就是我所做的,就像一个魅力!
PanoramaItem panItem = (PanoramaItem)panorama.Items[1];
panorama.Items.Remove(panItem);
panorama.Items.Insert(0, panItem);
您需要从列表中删除面板并将其重新插入所需位置!
答案 4 :(得分:2)
按
设置新选择的项目pan.SetValue(Panorama.SelectedItemProperty, pan.Items[newSelectedItem]);
然而,它仅适用于初始阶段,因此我的想法是在更改所选项目时让全景控件重新初始化。这是我的代码,只需在Panorama.SelectedItem更改后添加它。
(pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Collapsed;
pan.SetValue(Panorama.SelectedItemProperty, pan.Items[(curIndex + 1) % pan.Items.Count]);
pan.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
(pan.Items[curIndex] as PanoramaItem).Visibility = Visibility.Visible;
但现在没有过渡效果!虽然,你可以创造自己。
它对我很有用,此页面还可以创建滑动右http://xme.im/slide-or-change-panorama-selected-item-programatically
的效果答案 5 :(得分:1)
当设备进入横向视图时,我使用此模型更改为枢轴,我可能最终将当前项目提取到应用程序状态。全景是横向的禁区。
private int hub_page_index;
protected override void OnOrientationChanged(OrientationChangedEventArgs e)
{
base.OnOrientationChanged(e);
if (panorama.Visibility == Visibility.Visible)
{
hub_page_index = panorama.SelectedIndex;
}
else if (pivot.Visibility == Visibility.Visible)
{
hub_page_index = pivot.SelectedIndex;
}
if (e.Orientation == PageOrientation.Landscape
|| e.Orientation == PageOrientation.LandscapeLeft
|| e.Orientation == PageOrientation.LandscapeRight)
{
// Display Pivot in Landscape orientation
pivot.SetValue(Pivot.SelectedItemProperty, pivot.Items[panorama.SelectedIndex]);
panorama.Visibility = Visibility.Collapsed;
pivot.Visibility = Visibility.Visible;
}
else
{
// Display Panorama in Portrait orientation
panorama.SetValue(Panorama.SelectedItemProperty, panorama.Items[pivot.SelectedIndex]);
pivot.Visibility = Visibility.Collapsed;
panorama.Visibility = Visibility.Visible;
}
}