Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 表单FlexLayout将大小调整为最大值_C#_User Interface_Xamarin_Xamarin.forms - Fatal编程技术网

C# 表单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”将调整大小以填充整个列空间

我在Xamarin.Forms应用程序中有一个FlexLayout,它显示一些帧。问题是,如果我设置
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我刚刚编辑了我的答案,如果您有任何问题,请回答我。我真的不喜欢这种解决方案,因为它会导致项目闪烁。是否没有内在的方法来实现这一点?