Xamarin窗体的相对布局-得到一个堆栈布局中心的内部

本文关键字:一个 堆栈布局 内部 相对 窗体 布局 Xamarin | 更新日期: 2023-09-27 18:19:11

我有一个Xamarin表单应用程序,我使用相对布局来获得一些元素非常具体的定位。我想在相对布局的中间有一个堆栈布局。我使用以下代码:

_relativeLayout.Children.Add (
        _stackLayout, 
        Constraint.RelativeToParent(p => (p.Width / 2) - (_stackLayout.Width / 2) ),
        Constraint.RelativeToParent(p => (p.Height/ 2) - (_stackLayout.Height / 2) )
    );

加载表单时,我没有得到正确的结果。堆栈布局是远离一边。然而,如果我把屏幕朝一个方向旋转,然后再转回来,它看起来就完美了。所以我认为,当布局被渲染时,堆栈布局的高度和宽度还没有完全计算出来,但是在旋转时,这些值是已知的,所以它可以正确渲染。

如何使堆栈布局完美地集中在初始表单加载?

Xamarin窗体的相对布局-得到一个堆栈布局中心的内部

您可以使用请求值。检查宽度/高度是否为-1,在这种情况下,它还没有初始化,你应该使用请求值。如果已初始化,则使用

        this._relativeLayout.Children.Add(
            this._stackLayout, 
            Constraint.RelativeToParent(p => (p.Width / 2) - 
                ((this._stackLayout.Width == -1 ? this._stackLayout.WidthRequest : this._stackLayout.Width) / 2)),
            Constraint.RelativeToParent(p => (p.Height / 2) - 
                ((this._stackLayout.Height == -1 ? this._stackLayout.HeightRequest : this._stackLayout.Height) / 2))
        );