Xamarin.Forms Почему так много места между двумя стеками в представлении PopUp - PullRequest
0 голосов
/ 12 марта 2020

enter image description here `` `

<pages:PopupPage.Resources>
        <local1:ChangeFrameBackgroudColor x:Key="ChangeFrameBackgroudColor" />
    </pages:PopupPage.Resources>

    <pages:PopupPage.Animation>
        <animations:ScaleAnimation DurationIn="400"
                                   DurationOut="300"
                                   EasingIn="SinOut"
                                   EasingOut="SinIn"
                                   HasBackgroundAnimation="True"
                                   PositionIn="Center"
                                   PositionOut="Center"
                                   ScaleIn="1.2"
                                   ScaleOut="0.8" />
    </pages:PopupPage.Animation>

    <StackLayout Margin="12"

                 BackgroundColor="WhiteSmoke"
                 HorizontalOptions="Center"
                 VerticalOptions="Center"
                 >
        <StackLayout>

            <ListView x:Name="list" HasUnevenRows="True"  ItemsSource="{Binding Firms}" SelectedItem="{Binding FirmId} " Header="{Binding}" ItemTapped="Choose_firm" SelectionMode="Single" Margin="0"  >
                <ListView.ItemTemplate >
                    <DataTemplate>
                        <local:ExtendedViewCell SelectedBackgroundColor="WhiteSmoke"  >

                            <StackLayout  Padding="20, 10"  >
                                <Frame x:Name="frameLabel" BorderColor="#2188ff" BackgroundColor="{Binding IsActive, Converter={StaticResource ChangeFrameBackgroudColor}}" CornerRadius="10">
                                    <Label  FontAttributes="Bold" FontSize="18" TextColor="Black" Text="{Binding Name}" ></Label>
                                </Frame>
                            </StackLayout>

                        </local:ExtendedViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
                <ListView.HeaderTemplate>
                    <DataTemplate>
                        <ContentView BackgroundColor="#006BE6" >
                            <Label Margin="10" HorizontalOptions="CenterAndExpand" Text="Choose Firm"  TextColor="White" FontSize="20" FontAttributes="Bold"/>
                        </ContentView>
                    </DataTemplate>
                </ListView.HeaderTemplate>
            </ListView>
            <StackLayout VerticalOptions="End" Orientation="Horizontal" >
                <Label Text="Check Default:"  FontSize="18" />
                <CheckBox  IsChecked="False" Color="#006BE6" ></CheckBox>
            </StackLayout>
            </StackLayout>

        <StackLayout Orientation="Horizontal" VerticalOptions="Center" HorizontalOptions="Center" Margin="0,0,0,10">
            <Button Text="CHANGE"  BackgroundColor="#006BE6" IsEnabled="{Binding !IsBusy}" TextColor="White" Command="{Binding LoadFirmCommand}" CommandParameter="{Binding FirmId}" CornerRadius="10"></Button>
            <Button Text="CANCEL"  BackgroundColor="Gray" IsEnabled="{Binding !IsBusy}" TextColor="White" Clicked="ClosePopUp" CornerRadius="10"></Button>
        </StackLayout>
    </StackLayout>

</pages:PopupPage>

В первом StackLayout я получил ListView только с 3 элементами. После этого остается много пустого пространства, а в нижней части всплывающего окна находятся два других StackLayouts. Я пробовал с полями, Padding, но ничего не изменилось. Я не знаю в чем проблема. Почему так много места. У двух нижних StackLayouts нет места между ними. Как решить это пустое место?

1 Ответ

1 голос
/ 12 марта 2020

Я не запускал ваш код, но, глядя на ваш XAML, я вижу, что для вашего макета стека в вертикальной опции мы говорим, что он заканчивается

<StackLayout VerticalOptions="End" Orientation="Horizontal" >
                <Label Text="Check Default:"  FontSize="18" />
                <CheckBox  IsChecked="False" Color="#006BE6" ></CheckBox>

Однако, обратите внимание, как он переносится макет родительского стека. Поскольку у него нет запроса на высоту, он просто подчиняется тому, что ему было сказано. Родительское расположение стека - это то, где определяется представление списка. Таким образом, он загружает представление списка, а затем рендерит другой макет стека внизу (Конец), вызывая огромный разрыв так по существу:

<StackLayout VerticalOptions="End" Orientation="Horizontal" >
                <Label Text="Check Default:"  FontSize="18" />
                <CheckBox  IsChecked="False" Color="#006BE6" ></CheckBox>
            </StackLayout>
            </StackLayout>

Goes To:

</StackLayout>
<StackLayout VerticalOptions="End" Orientation="Horizontal" >
                <Label Text="Check Default:"  FontSize="18" />
                <CheckBox  IsChecked="False" Color="#006BE6" ></CheckBox>
            </StackLayout>
...