如何为不同方向切换不同的XAML界面

4

我知道如何展示一个内容页面,但是如何根据方向选择正确的布局呢?我想编写两个 XAML 文件:一个用于垂直方向,另一个用于水平方向。当方向改变时,是否有可能切换 XAML 文件呢?

1个回答

5

Xamarin.Forms在共享代码中并没有提供任何本地事件来通知您的应用程序方向更改。但是,当页面的宽度或高度发生变化时,Page的SizeChanged事件会触发。当页面的宽度大于高度时,设备处于横向模式。

protected override void OnSizeAllocated (double width, double height){
    base.OnSizeAllocated (width, height);
    if (width != this.width || height != this.height) {
        this.width = width;
        this.height = height;
        if (width > height) {
            // landscape
        } else {
            // portrait
        }
    }
}

使用这个功能,您可以根据设备方向编程更改页面内容为新的内容。

Content = // new content here.

如果有耐心,您可以尝试使用相同的XAML,但仅更改某些视图的方向,例如此处的示例。

源代码在这里


不看实现细节很难回答这个问题。但是当你旋转屏幕时(至少在Android上),视图必须重新创建和绘制。因此,创建新视图或旋转现有视图的成本几乎相同。在你的情况下,我猜最好的做法是选择对你来说更容易的方式。 - jzeferino
嗯..我有一个界面,它在横向模式下有左侧面板、绘图的中心区域和右侧面板,在纵向模式下有顶部面板、中心区域和底部面板。每个面板都有5个图像按钮。哪种做法是最佳实践呢?将其作为Content View还是Content Page? - LittleFunny
这个评论区太大了,我将删除旧的评论,请你也这样做。因此,在你的第一个XAML内容视图中,你将需要一些代码后台。在你的其他内容视图中,你将需要非常相似甚至相等的代码后台。为此,我建议创建一个不同的类,该类具有代码后台,并在你的内容视图中使用同一个类。 - jzeferino
如果我们有两个不同的代码后端,但功能相同。我会复制内部代码。对于我可能有任何误解,我很抱歉。 - LittleFunny
由于功能和内部代码是相同的,我建议您选择该代码,将其放入单独的类中,并在内部代码中使用该类。 - jzeferino
2
我明白你的意思。 - LittleFunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接