Xamarin.Forms中的ListView
具有RowHeight
属性,但似乎无论我将其设置为什么高度。
我使用Visual Studio 2013,我拥有Xamarin的商业版许可证,我使用Android模拟器 MonoForAndroid_API_15 ,我相信我拥有所涉及的所有内容的最新版本。到目前为止,我无法运行iOS或WinPhone模拟器,因此我无法进行比较。这只是Android模拟器的一个问题,还是设置RowHeight
属性不正确?
这是我继承的ContentPage
(请注意,我设置了RowHeight
):
public class QuizzesPage : ContentPage
{
private readonly ListView _listView;
public QuizzesPage()
{
Title = "Test";
NavigationPage.SetHasNavigationBar(this, true);
_listView = new ListView {RowHeight = 20};
Content = _listView;
}
protected async override void OnAppearing()
{
base.OnAppearing();
_listView.ItemsSource = new[] {"One", "Two", "Three", "Four", "Five"};
}
}
在App
:
public class App
{
public static Page GetMainPage()
{
return new NavigationPage(new QuizzesPage());
}
}
这是视觉效果:
请注意,我的代码是the TODO example used by Xamarin的简化版本,您可以看到它们以与我相同的方式设置RowHeight
属性。
无论我设置为RowHeight
,行都具有相同的巨大高度。我该怎么办?
编辑1:我计划本周升级到Windows 8.1,然后可以测试它在WinPhone上的外观。要在工作中将Mac添加到网络,我首先需要一些权限。这就是为什么我现在只能使用Android模拟器了。
编辑2 我尝试将HasUnevenRows
设置为true,为suggested here,但这只会让它接受更长的条目,而不是更改高度(或字体)排,这对我来说太大了。
编辑3:我发布了解决方案/解决方法作为答案。至少我可以完全控制细胞的高度。但是RowHeight
似乎并不多。
答案 0 :(得分:6)
我得到this suggestion:
不确定RowHeight但尝试将ListView.HasUnevenRows设置为true。然后,您可以指定单元格的高度。可能是在使用RowHeight时也需要设置此bool。
这让我意识到我必须创建一个继承自ViewCell
的类并绑定到类上的属性:
public class QuizCell : ViewCell
{
public QuizCell()
{
var label = new Label {HeightRequest = 20};
label.SetBinding (Label.TextProperty, "Title");
View = label;
}
}
要使用此功能,我将QuizzesPage
更改为:
public class QuizzesPage : ContentPage
{
private readonly ListView _listView;
public QuizzesPage()
{
Title = "Test";
NavigationPage.SetHasNavigationBar(this, true);
_listView = new ListView
{
HasUnevenRows = true,
ItemTemplate = new DataTemplate(typeof (QuizCell)),
//RowHeight = 10
};
Content = _listView;
}
protected async override void OnAppearing()
{
base.OnAppearing();
var quizEndpoint = new QuizEndpoint("Test");
var quizzes = await quizEndpoint.LoadAllAsync();
_listView.ItemsSource = quizzes;
}
}
这里的重要部分是:
ListView
s ItemSource
设置为List<Quiz>
,其中Quiz
对象具有Title
属性(我绑定Label
的属性} to)。ListView
将ItemTemplate
方法设置为new DataTemplate(typeof (QuizCell))
,这是我创建的新类。现在我可以使用继承自HeightRequest
的类中使用的组件的ViewCell
属性将高度设置为我想要的任何行。
我遇到问题的原因是我简化了the TODO example(并且RowHeight
似乎没有做多少)。最后,这与模拟器无关。我希望这有助于某人!