C# 如何使ListView高度动态化?

C# 如何使ListView高度动态化?,c#,xaml,listview,xamarin.forms,C#,Xaml,Listview,Xamarin.forms,我有一个列表视图,下面是一个堆栈布局。我试图通过使用XAML使ListView高度随着更多行的添加而增加(使用StackLayout中的命令)。发生的情况是ListView is height太大,页面最终可向下滚动StackLayout 这是我的密码: <StackLayout Orientation="Vertical"> <BoxView HorizontalOptions="FillAndExpand" HeightRequest="10" Color="Tr

我有一个
列表视图
,下面是一个
堆栈布局
。我试图通过使用XAML使
ListView
高度随着更多行的添加而增加(使用
StackLayout
中的命令)。发生的情况是ListView is height太大,页面最终可向下滚动
StackLayout

这是我的密码:

<StackLayout Orientation="Vertical">
     <BoxView HorizontalOptions="FillAndExpand" HeightRequest="10" Color="Transparent/>
     <StackLayout>
          <Label Style="{StaticResource AXASOL_Label_H1}" TextColor="White" Text="Do you have Dependents?" HorizontalOptions="Center"/>
     </StackLayout>
     <ListView>
          <ListView.ItemTemplate>
              <DataTemplate>
                   <ViewCell>
                   </ViewCell>
              </DataTemplate>
           </ListView.ItemTemplate>
     </ListView>
     <StackLayout Orientation="Horizontal" HorizontalOptions="Center">
     </StackLayout>
 </StackLayout>


我建议使用
网格
而不是
堆栈布局
。确保包含
列表视图的
行设置了
高度=“*”

    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Label Grid.Row="0" Content="Do you have Dependents?" />

     <ListView Grid.Row="1" ItemsSource="{Binding Items}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Button Grid.Row="2" Content="Click" Click="ButtonBase_OnClick"></Button>
</Grid>

代码隐藏:

public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();
    DataContext = this;
    Items = new ObservableCollection<Item>();
    Items.Add(new Item("bla"));
    Items.Add(new Item("blub"));
    Items.Add(new Item("blubber"));
 }

  public ObservableCollection<Item> Items { get; set; }

  private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
  {
    Items.Add(new Item("test"));
  }
}

public class Item
{
  public Item(string name)
  {
    Name = name;
  }
  public string Name { get; set; }
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
DataContext=this;
Items=新的ObservableCollection();
项目。添加(新项目(“bla”);
项目。添加(新项目(“blub”);
项目。添加(新项目(“脂肪”);
}
公共ObservableCollection项{get;set;}
private void按钮base_OnClick(对象发送方,RoutedEventTarget e)
{
项目。添加(新项目(“测试”);
}
}
公共类项目
{
公共项(字符串名称)
{
名称=名称;
}
公共字符串名称{get;set;}
}

这将使所有带有
Height=“Auto”
行占据其内容所需的空间,并且包含
列表视图的
行将填满所有剩余空间。

我建议使用
网格
而不是
堆栈布局。确保包含
列表视图的
行设置了
高度=“*”

    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Label Grid.Row="0" Content="Do you have Dependents?" />

     <ListView Grid.Row="1" ItemsSource="{Binding Items}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <Button Grid.Row="2" Content="Click" Click="ButtonBase_OnClick"></Button>
</Grid>

代码隐藏:

public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();
    DataContext = this;
    Items = new ObservableCollection<Item>();
    Items.Add(new Item("bla"));
    Items.Add(new Item("blub"));
    Items.Add(new Item("blubber"));
 }

  public ObservableCollection<Item> Items { get; set; }

  private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
  {
    Items.Add(new Item("test"));
  }
}

public class Item
{
  public Item(string name)
  {
    Name = name;
  }
  public string Name { get; set; }
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
DataContext=this;
Items=新的ObservableCollection();
项目。添加(新项目(“bla”);
项目。添加(新项目(“blub”);
项目。添加(新项目(“脂肪”);
}
公共ObservableCollection项{get;set;}
private void按钮base_OnClick(对象发送方,RoutedEventTarget e)
{
项目。添加(新项目(“测试”);
}
}
公共类项目
{
公共项(字符串名称)
{
名称=名称;
}
公共字符串名称{get;set;}
}

这将使所有带有
Height=“Auto”
行占据其内容所需的空间,并且包含
列表视图的
行将填满所有剩余空间。

我尝试了这一点,但随着列表的增长,最后一行不会消失down@AlfieMcNarutoad我编辑了我的帖子。单击按钮将立即向listview添加新项目。我不明白你说的最后一排不倒是什么意思。添加新项目时,您希望发生什么情况?@AlfieMcNarutoad您可以尝试将包含ListView的行的高度设置为
自动
?这能解决你的问题吗?我之前也试过,但运气不好。我想这可以追溯到非托管和托管布局规则。我尝试过这一点,但随着列表的增长,最后一行不会消失down@AlfieMcNarutoad我编辑了我的帖子。单击按钮将立即向listview添加新项目。我不明白你说的最后一排不倒是什么意思。添加新项目时,您希望发生什么情况?@AlfieMcNarutoad您可以尝试将包含ListView的行的高度设置为
自动
?这能解决你的问题吗?我之前也试过,但运气不好。我认为这可以追溯到非托管和托管布局规则