Xamarin.Forms ListView с высотой авторазмера - PullRequest
0 голосов
/ 26 января 2020

Я прочитал много статей об стеке потока, чтобы узнать, как установить высоту ListView так, чтобы ListView был точно таким же высоким, как и его содержимое. Но ни один из многих ответов не отвечает моим потребностям.

Я пытался адаптировать образец базового списка в https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/workingwithlistview/ с этим кодом

<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
        <StackLayout AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
            <ScrollView>
                <StackLayout>
                    <StackLayout VerticalOptions="StartAndExpand">
                        <Label Text="Hallo"/>
                    </StackLayout>
                    <StackLayout VerticalOptions="StartAndExpand" >
                        <ListView x:Name="listView" BackgroundColor="Green" VerticalOptions="Start"
                              ItemsSource="{Binding .}" >
                            <ListView.Footer>
                                <Label />
                            </ListView.Footer>
                        </ListView>
                    </StackLayout>
                    <StackLayout>
                        <Label Text="Hallosdf"/>
                    </StackLayout>
                </StackLayout>
            </ScrollView>
        </StackLayout>
    </AbsoluteLayout>

, но независимо от того, что я делать, все результаты в списке, который слишком высок. Зеленый элемент - это увеличенный вид списка. Все содержимое под списком просмотра находится вне области просмотра.

Большое спасибо. Уве

enter image description here

Ответы [ 3 ]

1 голос
/ 26 января 2020

Проблема в том, что вы вложили 2 вида прокрутки с одинаковым направлением друг в друга (ScrollView и ListView) без фиксированной высоты.

Решение, если вы хотите ListView, чтобы сжать его содержимое: Удалить ListView

Существует BindableLayout, который можно использовать с StackLayout и другими макетами. (https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/bindable-layouts)

<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
    <ScrollView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
        <StackLayout >
            <Label Text="Hallo"/>
            <StackLayout BindableLayout.ItemsSource="{Binding .}" BackgroundColor="Green">
                <BindableLayout.ItemTemplate>
                    <DataTemplate>
                        <Label Text="{Binding .}"/> 
                    </DataTemplate>
                </BindableLayout.ItemTemplate>
            </StackLayout>
            <Label Text="Hallosdf"/>
        </StackLayout>
    </ScrollView>
</AbsoluteLayout>

enter image description here

Решение, если вы хотите, чтобы ListView растягивался: удалите Scrollview

Метка Hallosdf будет отображаться под ListView, и будет прокручиваться только ListView. Кстати: вам не нужно оборачивать каждый вид в StackLayout. Старайтесь избегать ненужных раскладок, чтобы добиться максимальной производительности. Если StackLayout является единственным макетом в вашем AbsoluteLayout, вы также можете избавиться от AbsoluteLayout.

<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
    <StackLayout AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0,0,1,1">
        <Label Text="Hallo"/>
        <ListView x:Name="listView" BackgroundColor="Green" VerticalOptions="FillAndExpand"
                          ItemsSource="{Binding .}" >
        </ListView>
        <Label Text="Hallosdf"/>
    </StackLayout>
</AbsoluteLayout>

enter image description here

0 голосов
/ 28 января 2020

use DLToolkit.Forms.Controls.FlowListView

xmal

SfListView Orientation = "Horizontal" QueryItemSize = "ListItems_QueryItemSize" ItemsSource = "{Binding FavItemList} 1007 *

QueryItemSize используется для установки пользовательской высоты каждого элемента

в коде позади

private void ListItems_QueryItemSize(object sender,Syncfusion.ListView.XForms.QueryItemSizeEventArgs e)
    {
        if (e.ItemData != null && !string.IsNullOrEmpty((e.ItemData as FavItemsList).Name))
        {
            e.ItemSize = (e.ItemData as FavItemsList).Name.Count() + 80;
            e.Handled = true;
        }
    }
0 голосов
/ 27 января 2020

Аааа, важна высота строки. У меня нет неровных строк, и поэтому я могу установить RowHeight.

<StackLayout Orientation="Vertical"
             VerticalOptions="Fill"
             HorizontalOptions="StartAndExpand">
    <ListView VerticalOptions="FillAndExpand"
              RowHeight="<some row height>">
    </ListView>
</StackLayout>

Ответ № 7 найден в Xamarin.Forms: ListView внутри StackLayout: как установить высоту?

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...