即使给定值,contentview的宽度也会改变大小

时间:2018-10-31 02:04:14

标签: xamarin xamarin.forms

我在下一个堆栈布局中有一个contentview:

<StackLayout Padding="0" x:Name="VisualColumn" WidthRequest="{Binding widthColumn,Source={x:Reference DeliveryPage}}">

</StackLayout>

DeliveryPage是内容页面的名称,并且widthColums属性的声明如下:

public double widthCol
    {
        get {
            if (widthScreen < heightScreen)
            {
                return Constants.ScreenWidth * 0.3;
            }
            return Constants.ScreenHeight * 0.3;
        }
    }

宽度屏幕和高度屏幕仅在手机旋转时更改。

在堆栈布局“ VisualColumn”内部有一个contentview,该视图可以显示不同的堆栈布局,并带有自己的标签,但是可以显示的3个部分的with有所不同。为什么会这样?

1 个答案:

答案 0 :(得分:0)

请参阅WidthRequest

的文档
  

此元素需要的宽度。 [强调我的]

如果还有其他限制使得无法完成请求,则可能会导致WidthRequest被忽略。

我不知道您的确切布局,但是我认为还有其他选择可以实现您想要的,我将画出其中的两个:

使用Grid

有了Grid,有很多选项可以微调您的布局。尤其是*的宽度(或高度)。给定宽度*的列将占用可用空间。如果有多列宽度为*的列,它们将平均分配可用空间。无论如何,您可以使用*的倍数。有一列包含*,一列包含2*意味着它们占用了可用空间,第二列占用的空间是第一列的两倍

 *    2*
+----+--------+
|    |        |
|    |        |

在您的情况下(您希望该列占用30%的可用空间),您可以让一列包含3*,另一列包含7*(或3*,{ {1}}和3*;如果第一个占30%,请确保它们的总和为4*

10

使用 3* 7* +------+--------------+ | | | | | |

另一个非常灵活的选择是使用AbsoluteLayout

  

将子元素定位在绝对位置。

使用AbsoluteLayout,您可以直接控制布局子级的位置和大小。例如。如果您只想控制AbsoluteLayout的宽度并将其放置在StackLayout上,则可以使用以下代码

(0, 0)

<AbsoluteLayout> <StackLayout AbsoluteLayout.LayoutFlags="WidthProportional, PositionProportional" AbsoluteLayout.LayoutBounds="0,0,.3,-1"> </StackLayout> </AbsoluteLayout> 告诉LayoutBounds="0,0,.3,-1"AbsoluteLayout放置在StackLayout处,并将宽度设置为30%(0,0)。不会设置孩子的身高(.3)。