C# 表单FlexLayout将大小调整为最大值
我在Xamarin.Forms应用程序中有一个FlexLayout,它显示一些帧。问题是,如果我设置C# 表单FlexLayout将大小调整为最大值,c#,user-interface,xamarin,xamarin.forms,C#,User Interface,Xamarin,Xamarin.forms,我在Xamarin.Forms应用程序中有一个FlexLayout,它显示一些帧。问题是,如果我设置FlexLayout.Grow=“1”,未完全填充列的最后帧将增长到填充列的大小。但是如果我设置FlexLayout.Grow=“0”每个列的末尾都会有一些空白 正如您在“过敏原”下所看到的,在调整窗口大小时,每列末尾都会有一点空间,空间会增大,直到第五项可以放入该列(当FlexLayout.grow=“0”set)。但是如果我设置FlexLayout.Grow=“1”将调整大小以填充整个列空间
FlexLayout.Grow=“1”
,未完全填充列的最后帧将增长到填充列的大小。但是如果我设置FlexLayout.Grow=“0”
每个列的末尾都会有一些空白
正如您在“过敏原”下所看到的,在调整窗口大小时,每列末尾都会有一点空间,空间会增大,直到第五项可以放入该列(当FlexLayout.grow=“0”
set)。但是如果我设置FlexLayout.Grow=“1”
将调整大小以填充整个列空间,直到第五个项目放入该列。然后所有项目都将调整到其最小值。这是应该的,但我不希望最后的项目无限增长。请参见此图:
以下是FlexLayout的代码:
<StackLayout Grid.Row="11">
<flexLayouts:ExtendedFlexLayout Margin="5,0,5,0"
Direction="Row"
Wrap="Wrap"
VerticalOptions="Start"
AlignItems="Start"
JustifyContent="Start"
ItemsSource="{Binding Allergens}">
<flexLayouts:ExtendedFlexLayout.ItemTemplate>
<DataTemplate>
<details:BeverageDetailsView FlexLayout.Grow="1" />
</DataTemplate>
</flexLayouts:ExtendedFlexLayout.ItemTemplate>
</flexLayouts:ExtendedFlexLayout>
</StackLayout>
有没有办法阻止剩余的项目调整到如此大的尺寸?
感谢您的帮助解决方案: 我认为右边空白的长度取决于项目的
widthRequest
。而widthRequest
将由boxView的屏幕宽度和边距计算
例如,如果要将4个项目放在一行中,则此处的boxMargin为10
你应该先得到屏幕宽度,你可以参考
然后,您可以计算项目的宽度请求
因为一行中有4个项目,每个项目都有一个左右边距,所以一行中有8个边距。因此,screenWidth
应该减去itemsInRow*2*边距
float screenWidth = 375;//375 is an example ,you should use screen width in your code
float margin = 10;
float itemsInRow = 4;
float widthRequest = (screenWidth - itemsInRow *2 * margin)/4;
将widthRequest
设置为Xaml
中的项目,则左空格和右空格的长度将相同
我在这里添加了一个图像,以说明:
我通过使用模板选择器并在集合末尾添加几个空项来解决这个问题。模板选择器为显示项选择常规模板,为空项选择具有空网格的模板。我在视图模型中创建了集合,方法是包装可观察集合,并让视图模型集合始终以空值形式显示N个以上的项。但我不希望这些项居中,我希望它们都增长,但是它们中没有一个应该比另一个更大。我有点困惑。我认为如果所有项目都增长并且在视图中具有相同的大小,那么它们应该看起来像视图中的中心。它们增长相同的大小,除了那些不能填充整列的项目。假设有11个项目,第1、2和3列各包含3个项目,这些项目的大小都相同。因此,第4列将显示剩下的2个项目,但由于只有2个(其他列包含3个),因此第4列中的2个项目将更大,以填充整个空间。这不是我需要的,所有项目都应该大小equally@DanielDirtyNative Martin我刚刚编辑了我的答案,如果您有任何问题,请回答我。我真的不喜欢这种解决方案,因为它会导致项目闪烁。是否没有内在的方法来实现这一点?