我在下一个堆栈布局中有一个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有所不同。为什么会这样?
答案 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
)。