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的行的高度设置为自动
?这能解决你的问题吗?我之前也试过,但运气不好。我认为这可以追溯到非托管和托管布局规则