Xamarin.Forms ListView根据内容多少显示大小
我有一个相当大的表格(主要用于平板电脑),它有一个TabbedPage嵌套的a ScrollView和一个StackPanel包含许多控件的垂直框。
我ListView遇到的情况很少,其中包含一些单行项目,因此需要根据内容大小进行调整。
我想摆脱它的滚动条,但是无论如何我都不希望它占用比其项目所需更多的空间。
有没有一种方法(甚至是一个丑陋的方法)也可以无需编写渲染器x3平台来实现?
这是描述我的树的伪造物:
<ContentPage>
<MasterDetailPage>
<MasterDetailPage.Detail>
<TabbedPage>
<ContentPage>
<ScrollView>
<StackPanel>
<!-- many controls-->
<ListView>
渲染后,之后会有巨大的差距ListView。我该如何避免呢?
我尝试弄乱了VerticalOptions和HeightRequest,但都没有用。
我正在寻找一种动态方式(最好是不继承)来实现这一目标,而又不涉及自定义渲染器。
根据Lutaaya的回答,我做出了一个使之自动化的行为,确定并设置了行高(Gist)。
行为:
namespace Xamarin.Forms
{
using System;
using System.Linq;
public class AutoSizeBehavior : Behavior<ListView>
{
ListView _ListView;
ITemplatedItemsView<Cell> Cells => _ListView;
protected override void OnAttachedTo(ListView bindable)
{
bindable.ItemAppearing += AppearanceChanged;
bindable.ItemDisappearing += AppearanceChanged;
_ListView = bindable;
}
protected override void OnDetachingFrom(ListView bindable)
{
bindable.ItemAppearing -= AppearanceChanged;
bindable.ItemDisappearing -= AppearanceChanged;
_ListView = null;
}
void AppearanceChanged(object sender, ItemVisibilityEventArgs e) =>
UpdateHeight(e.Item);
void UpdateHeight(object item)
{
if (_ListView.HasUnevenRows)
{
double height;
if ((height = _ListView.HeightRequest) ==
(double)VisualElement.HeightRequestProperty.DefaultValue)
height = 0;
height += MeasureRowHeight(item);
SetHeight(height);
}
else if (_ListView.RowHeight == (int)ListView.RowHeightProperty.DefaultValue)
{
var