删除 xamarin 表单中的空列表视图 space
removing empty space of listview in xamarin forms
我正在为我的项目使用 xamarin.forms 列表视图。设计如下:
<ContentView x:Name="Overlay" IsVisible="False"
VerticalOptions="Center" HorizontalOptions="Center" Margin="10,20,10,30"
AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" BackgroundColor="LightGray">
<StackLayout Spacing="0">
<StackLayout Padding="20" BackgroundColor="#9C6114" Spacing="0">
<Label Text="Country Name" TextColor="White" FontAttributes="Bold" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"></Label>
</StackLayout>
<StackLayout Spacing="0">
<ListView x:Name="CountryList" HasUnevenRows="True" Margin="10,0,0,0">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Switch IsToggled="{Binding IsToggle}"></Switch>
<Label Text="{Binding CountryName}"></Label>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Footer>
<StackLayout Orientation="Horizontal">
<Button x:Name="btncancel" Text="Cancel" TextColor="White" BackgroundColor="#9C6114" HorizontalOptions="CenterAndExpand" Clicked="btncancel_Clicked"></Button>
<Button x:Name="btnsubmit" Text="Submit" TextColor="White" BackgroundColor="#9C6114" HorizontalOptions="CenterAndExpand" Clicked="btnsubmit_Clicked"></Button>
</StackLayout>
</ListView.Footer>
</ListView>
</StackLayout>
</StackLayout>
</ContentView>
对于此列表视图,列表视图下方有空白 space。我无法删除列表视图中多余的 spaces。请看附图。enter image description here
请帮我解决这个问题。
我遇到了类似的问题。我按照这个 link: https://xamarinsharp.com/2017/05/20/xamarin-forms-listview-height-change-dynamically-using-mvvm-and-also-solve-empty-space-issue/
基本上,如果您还没有,则需要使用 MVVM 设置您的项目。在您的 XAML 中,您必须向列表视图提供 HeighRequest 属性 并将其值设置为:HeighRequest="{Binding Height}"。在您的视图模型中,添加:
int _height;
public 整数高度
{
get { return _height; }
set
{
_height = value;
OnPropertyChanged("Height");
}
}
然后,在您的 viewModel 的构造函数中(或您设置列表视图对象的任何地方),添加:
Height = (**object**.Count * 60) + (**object**.Count * 10);
这对我来说效果很好!
经过大量搜索,我发现以下内容对我有用:我有一个列表视图模板,其中包含一个包含网格的框架。在我的 XAML 文件中,我为网格添加了一个 SizeChanged 事件和 BindingContext:
...
<ListView x:Name="worksiteList"
ItemsSource="{Binding WorksiteList}"
SelectionMode="Single"
SeparatorVisibility="None"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" Margin="0" Padding="0">
<Frame ...>
<Grid
SizeChanged="worksiteGrid_SizeChanged"
BindingContext="{Binding .}"
RowDefinitions="Auto,Auto"
ColumnDefinitions="50*,40*">
然后在后面的代码中,我添加了 SizeChanged 事件处理程序和 OnAppearing 的覆盖,如下所示:
private Dictionary<int, double> _worksiteFrameSizeMap = new Dictionary<int, double>();
public void worksiteGrid_SizeChanged(object sender, EventArgs e)
{
var grid = sender as Grid;
if (grid != null)
{
var frame = grid.Parent as Frame;
if (frame != null)
{
var worksite = grid.BindingContext as Worksite;
if (worksite != null)
{
var frameHeight = 0.0;
frameHeight += frame.Height;
frameHeight += frame.Margin.Top;
frameHeight += frame.Margin.Bottom;
_worksiteFrameSizeMap[worksite.WorksiteId] = frameHeight;
}
}
}
}
protected override void OnAppearing()
{
base.OnAppearing();
var worksiteListViewHeight = 0.0;
foreach (var item in _worksiteFrameSizeMap)
{
worksiteListViewHeight += item.Value;
}
worksiteList.HeightRequest = worksiteListViewHeight;
}
这是我获得列表高度的唯一方法,因此最后一个列表项下方没有空白 space(我尝试了许多其他方法,但均无效)。不幸的是,页面出现时有轻微的闪烁。我倾向于认为 ListView 控件有一个错误,因为 ListView 应该自动执行此操作(有人想要列表下方的空白 space 吗?)并且没有简单的方法来访问列表中的项目大小。
我正在为我的项目使用 xamarin.forms 列表视图。设计如下:
<ContentView x:Name="Overlay" IsVisible="False"
VerticalOptions="Center" HorizontalOptions="Center" Margin="10,20,10,30"
AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" BackgroundColor="LightGray">
<StackLayout Spacing="0">
<StackLayout Padding="20" BackgroundColor="#9C6114" Spacing="0">
<Label Text="Country Name" TextColor="White" FontAttributes="Bold" HorizontalTextAlignment="Center" VerticalTextAlignment="Center"></Label>
</StackLayout>
<StackLayout Spacing="0">
<ListView x:Name="CountryList" HasUnevenRows="True" Margin="10,0,0,0">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Horizontal">
<Switch IsToggled="{Binding IsToggle}"></Switch>
<Label Text="{Binding CountryName}"></Label>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.Footer>
<StackLayout Orientation="Horizontal">
<Button x:Name="btncancel" Text="Cancel" TextColor="White" BackgroundColor="#9C6114" HorizontalOptions="CenterAndExpand" Clicked="btncancel_Clicked"></Button>
<Button x:Name="btnsubmit" Text="Submit" TextColor="White" BackgroundColor="#9C6114" HorizontalOptions="CenterAndExpand" Clicked="btnsubmit_Clicked"></Button>
</StackLayout>
</ListView.Footer>
</ListView>
</StackLayout>
</StackLayout>
</ContentView>
对于此列表视图,列表视图下方有空白 space。我无法删除列表视图中多余的 spaces。请看附图。enter image description here
请帮我解决这个问题。
我遇到了类似的问题。我按照这个 link: https://xamarinsharp.com/2017/05/20/xamarin-forms-listview-height-change-dynamically-using-mvvm-and-also-solve-empty-space-issue/
基本上,如果您还没有,则需要使用 MVVM 设置您的项目。在您的 XAML 中,您必须向列表视图提供 HeighRequest 属性 并将其值设置为:HeighRequest="{Binding Height}"。在您的视图模型中,添加:
int _height;
public 整数高度
{
get { return _height; }
set
{
_height = value;
OnPropertyChanged("Height");
}
}
然后,在您的 viewModel 的构造函数中(或您设置列表视图对象的任何地方),添加:
Height = (**object**.Count * 60) + (**object**.Count * 10);
这对我来说效果很好!
经过大量搜索,我发现以下内容对我有用:我有一个列表视图模板,其中包含一个包含网格的框架。在我的 XAML 文件中,我为网格添加了一个 SizeChanged 事件和 BindingContext:
...
<ListView x:Name="worksiteList"
ItemsSource="{Binding WorksiteList}"
SelectionMode="Single"
SeparatorVisibility="None"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical" Margin="0" Padding="0">
<Frame ...>
<Grid
SizeChanged="worksiteGrid_SizeChanged"
BindingContext="{Binding .}"
RowDefinitions="Auto,Auto"
ColumnDefinitions="50*,40*">
然后在后面的代码中,我添加了 SizeChanged 事件处理程序和 OnAppearing 的覆盖,如下所示:
private Dictionary<int, double> _worksiteFrameSizeMap = new Dictionary<int, double>();
public void worksiteGrid_SizeChanged(object sender, EventArgs e)
{
var grid = sender as Grid;
if (grid != null)
{
var frame = grid.Parent as Frame;
if (frame != null)
{
var worksite = grid.BindingContext as Worksite;
if (worksite != null)
{
var frameHeight = 0.0;
frameHeight += frame.Height;
frameHeight += frame.Margin.Top;
frameHeight += frame.Margin.Bottom;
_worksiteFrameSizeMap[worksite.WorksiteId] = frameHeight;
}
}
}
}
protected override void OnAppearing()
{
base.OnAppearing();
var worksiteListViewHeight = 0.0;
foreach (var item in _worksiteFrameSizeMap)
{
worksiteListViewHeight += item.Value;
}
worksiteList.HeightRequest = worksiteListViewHeight;
}
这是我获得列表高度的唯一方法,因此最后一个列表项下方没有空白 space(我尝试了许多其他方法,但均无效)。不幸的是,页面出现时有轻微的闪烁。我倾向于认为 ListView 控件有一个错误,因为 ListView 应该自动执行此操作(有人想要列表下方的空白 space 吗?)并且没有简单的方法来访问列表中的项目大小。