在ContentPage
中ListView
内StackLayout
内有ScrollView
ListView
。当ItemSource
被调用时,ContentPage
中填充OnAppearing
(StackLayout
已设置),我可以看到该列表已填充在模拟器中。 Vertical
方向为ListView
,低于Button
我有ListView
。
我的问题是,无论ListView
有多少元素,它都会达到53.33的高度。我希望HeightRequest
的高度与其中项目的总高度相匹配。通过设置ListView
,我可以将ListView
的高度设置为我想要的任何内容,但由于我不知道VerticalOptions
内项目的高度,结果通常是距离它下面的按钮不正确,因此看起来很难看。我试图在ListView
和StackLayout
到Start
以及其他设置上设置HeightRequest
,但这不会改变53.33的高度(如果我尝试使用Start
和{{1}}进行组合,结果证明HeightRequest胜出了。)
我该如何解决这个问题?
(请原谅Xamarin forum的交叉发布)
答案 0 :(得分:16)
我的解决方案是将ListView
放在StackLayout
内,然后将StackLayout
放在主StackLayout
内。然后我可以在内部VerticalOptions = LayoutOptions.FillAndExpand
(包含StackLayout
的那个)上设置ListView
,结果是ListView
获得了所需的空间(当然这取决于关于数据)。
这是主要代码:
listView.ItemsSource = alternativeCells;
listView.ItemSelected += ListViewOnItemSelected;
var listStackLayout = new StackLayout
{
VerticalOptions = LayoutOptions.FillAndExpand,
Orientation = StackOrientation.Vertical
};
listStackLayout.Children.Add(listView);
_stackLayout.Children.Add(listStackLayout);
如您所见,我添加了一个新的StackLayout
,其唯一目的是将ListView
放入其中。然后我将listStackLayout
放在主_stackLayout
内。
有关详细信息,请参阅this Xamarin forum post上的帖子
答案 1 :(得分:10)
我遇到了同样的问题,对我而言,这就像一个魅力:
listView.HasUnevenRows = true;
答案 2 :(得分:8)
以下代码适用于我,
protected override void OnAppearing()
{
base.OnAppearing();
listViewOrderCloths.HeightRequest = model.ListOrderedCloths.Count*100)/2 ;
}
答案 3 :(得分:7)
借助Xamarin Forms 3.5中的新BindableLayout
功能,您可以轻松地在ItemsSource
上使用StackPanel
。
因此,基本上,您可以编写如下内容:
<StackLayout BindableLayout.ItemsSource="{Binding list}">
<BindableLayout.ItemTemplate>
<DataTemplate>
...
</DataTemplate>
<BindableLayout.ItemTemplate/>
</StackLayout>
您可以在此处了解更多信息:https://blog.xamarin.com/xamarin-forms-3-5-a-little-bindable-love/
答案 4 :(得分:6)
我遇到了同样的问题,这是我为我解决的唯一问题(在XAML中):
<StackLayout Orientation="Vertical"
VerticalOptions="Fill"
HorizontalOptions="StartAndExpand">
<ListView VerticalOptions="FillAndExpand"
RowHeight="<some row height>">
</ListView>
</StackLayout>
希望它有效!
答案 5 :(得分:0)
我遇到了类似的困难,解决方案略有不同。首先,在ListView上设置RowHeight似乎是关键。其次,我遇到了绑定+计时问题。如果显示ListView并且没有内容,则将其设置为默认高度(显示空白区域)。如果我离开这个页面并回来了,那么尺寸很好。
所以我的方法是将ListView的可见性绑定到绑定的东西的存在(或缺少)。然后,当数据返回时,ListView变得可见并且具有适当的大小。
<ListView x:Name="lvSettlements" ItemsSource="{Binding RecentSettlements}" VerticalOptions="FillAndExpand" RowHeight="25" IsVisible="{Binding RecentSettlements, Converter={StaticResource nullConverter}}">
...SNIP...
</ListView>
答案 6 :(得分:0)
在Android上,我在代码中创建的表格会在其上方和下方留下空白。
这修好了......
HeightRequest="1000000"
我认为我有最狡猾的解决方案。
答案 7 :(得分:-1)
接受的答案不适用于我的情况,我的<script>
try{
var websocket = new WebSocket("wss://self-signed.badssl.com/");
websocket.onopen = function (event) {
};
websocket.onclose = function (event) {
var reason;
alert(event.code);
};
websocket.onmessage = function (event) {
};
websocket.onerror = function (event) {
};
}
catch(err){
document.getElementById("demo").innerHTML = err.message;
}
</script>
<p id="demo"></p>
可能比显示的长度更长,因此需要将其放在ListView
内,这会带回空白
我解决此问题的方法是,拥有顶级ScrollView
,然后将StackLayout
放置在直接ListView
中,例如以下XAML:
ScrollView