Xamarin.Forms ListView,如何设置RowHeight?

Hal*_*ard 3 android-emulator xamarin.forms

ListView在Xamarin.Forms有一个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"};
    }
}
Run Code Online (Sandbox Code Playgroud)

App:

public class App
{
    public static Page GetMainPage()
    {
        return new NavigationPage(new QuizzesPage());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是视觉效果:

Androind模拟器RowHeight问题

请注意,我的代码是Xamarin使用的TODO示例的简化版本,您可以看到它们RowHeight以与我相同的方式设置属性.

无论我设置什么,因为RowHeight行具有相同的巨大高度.我能做什么?

编辑1:我计划本周升级到Windows 8.1,然后可以测试它在WinPhone上的外观.要在工作中将Mac添加到网络,我首先需要一些权限.这就是为什么我现在只能使用Android模拟器了.

编辑2:我尝试设置HasUnevenRows为true,如此处所示,但这只是让它接受更长的条目,而不是更改行的高度(或字体),这对我来说太大了.

编辑3:我发布了解决方案/解决方法作为答案.至少我可以完全控制细胞的高度.但RowHeight似乎没有做太多.

Hal*_*ard 6

我有这个建议:

不确定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;
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使用它,我改为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的重要部分是:

  1. ListView小号ItemSource被设定为List<Quiz>,其中Quiz对象具有Title属性(I结合的所述一个Label到).
  2. ListView设置ItemTemplate方法new DataTemplate(typeof (QuizCell)),这是我创建的新类.

现在我可以HeightRequest使用继承的类中使用的组件的属性将高度设置为我想要的任何行ViewCell.

我的问题的原因是我过多地简化了TODO示例(并且这RowHeight似乎没有做太多).最后,这与模拟器无关.我希望这可以帮助别人!