当旋转手机屏幕时,如何将垂直(XAML)切换到另一个设计水平(XAML),而不是自动将旧垂直(XAML)布局为水平(XAML)
答案 0 :(得分:2)
假设您当前使用StackPanel
(或类似),并且已将SupportedOrientations
指定为PortraitOrLandscape
,则需要在Grid
中设计您的网页constnet,然后捕获OrientationChanged
事件并编写代码以重新定位网格中的UI元素。
有一个显示该技术的Quickstart Tutorial on MSDN。
修改强>
您可以通过捕获OrientationChanged
事件并使用Frame.Navigate
显示不同的页面来更改为不同的XAML,但我认为这会导致一些重复的代码。或者,您可以对页面进行编码,以便只需在Grid
中移动项目,就像MSDN exmaple代码所示:
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
// Switch the placement of the buttons based on an orientation change.
if ((e.Orientation & PageOrientation.Portrait) == (PageOrientation.Portrait))
{
Grid.SetRow(buttonList, 1);
Grid.SetColumn(buttonList, 0);
}
// If not in portrait, move buttonList content to visible row and column.
else
{
Grid.SetRow(buttonList, 0);
Grid.SetColumn(buttonList, 1);
}
}
替代方法是导航到其他页面 - 因此在您的肖像页面中,您可能有:
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
{
// Switch to a different page based on an orientation change.
if ((e.Orientation & PageOrientation.Landscape) == (PageOrientation.Landscape))
{
// switch to landscape orientation page
NavigationService.Navigate(new Uri("/LandscapePage.xaml", UriKind.Relative));
}
}
然后您将在横向页面中使用类似的代码,以检测方向更改并导航回纵向页面。