在.NET MAUI中,是否有一种方法可以根据设备是横向还是纵向来选择不同的XAML视图

wqsoz72f  于 2022-12-20  发布在  .NET
关注(0)|答案(1)|浏览(166)

我正在使用.NET MAUI,我有一个特定的视图,这是相当复杂的,我宁愿有一个不同的布局,如果设备方向是纵向与如果设备方向是横向。
很久以前,我对Android编程进行了修补,对于Android Studio,有一种方法可以在设备处于横向时选择一个XAML文件,而在设备处于纵向时选择一个不同的XAML文件。
这在MAUI中可行吗?如果不可行,最佳实践是什么?
这是我的布局和景观模式,我可以适合3个主要部分在一行,但这将不会在肖像和肖像工作,我想在下一行中间的主要元素。
以下是我的肖像与风景的样机我在Photoshop上创建的例子:

wpx232ag

wpx232ag1#

理想情况下,这就是我处理这种情况的方式:
在我的构造函数中,我将获得DisplayInfoChanged事件,如果此信息发生变化,它将通知我,并且我还将根据当前方向分配我的当前ContentView:

DeviceDisplay.Current.MainDisplayInfoChanged += Current_MainDisplayInfoChanged;
this.Content = DeviceDisplay.Current.MainDisplayInfo.Orientation == DisplayOrientation.Portrait ? potraitView : landscapeView;

在这里,PortraitView是一个ContentView,它是当我的设备处于Portrait和Vice Versa模式时我会显示的视图。
然后按如下方式处理方向的运行时更改:

private void Current_MainDisplayInfoChanged(object sender, DisplayInfoChangedEventArgs e)
{
        if(e.DisplayInfo.Orientation==DisplayOrientation.Landscape)
        {
            if(this.Content.GetType() is not typeof(LandscapeView))
            {
                this.Content = landscapeView;
            }
        }
        else if (e.DisplayInfo.Orientation == DisplayOrientation.Portrait)
        {
            if (this.Content.GetType() is not typeof(PortraitView))
            {
                this.Content = portraitView;
            }
        }
        else
        {
            //Whatever you would like to do if the orientation is unknown.
        }
}

希望这对你有帮助!

相关问题