如何在不调整屏幕大小的情况下让 Xamarin ListView 自动调整其行的大小?

Sim*_*mon 3 c# windows-8.1 xamarin.forms

我的 Xamarin 应用中有一个 ListView,定义如下:

        listView = new ListView
        {
            HorizontalOptions = LayoutOptions.Fill,
            HasUnevenRows = true,
            RowHeight = -1,
            ItemTemplate = new DataTemplate(() =>
            {
                var nameLabel = new Label
                {
                    VerticalOptions = LayoutOptions.Center,
                    HorizontalTextAlignment = TextAlignment.Start
                };
                nameLabel.SetBinding(Label.TextProperty, "DisplayName");

                var statusLabel = new Label 
                {
                    VerticalOptions = LayoutOptions.Center,
                    HorizontalTextAlignment = TextAlignment.End
                };
                statusLabel.SetBinding(Label.TextProperty, "Status");

                var grid = new Grid
                {
                    HorizontalOptions = LayoutOptions.Fill,
                    RowDefinitions = {
                        new RowDefinition { Height = GridLength.Auto }
                    },
                    ColumnDefinitions = {
                        new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) },
                        new ColumnDefinition { Width = GridLength.Auto }
                    }
                };

                grid.Children.Add(nameLabel, 0, 0);
                grid.Children.Add(statusLabel, 1, 0);

                return new ViewCell
                {
                    View = grid
                };
            })
        };
Run Code Online (Sandbox Code Playgroud)

当我第一次设置它的ItemsSource属性时,行被裁剪如下:

带有剪切行的 ListView

如果我调整屏幕大小,它们会被调整到正确的大小:

带有调整大小行的 ListView

如果我ItemsSource再次更改,它们会重新被剪裁。调用UpdateChildrenLayoutForceLayout无效。

如何让 ListView 正确调整其行的大小,而不必要求用户调整其窗口的大小?在移动设备上这将是一个艰难的问题!

Roh*_*ews 7

如果 ListView 是全屏显示,则设置VerticalOptions=FillAndExpand. 不要RowHeight静态设置。由于您拥有HasUnevenRows=true它,它会根据其中内容的大小不同地调整不同行的大小。还要为VerticalOptions列表视图的 ItemTemplate 中的控件提供 ,以便它们的大小正确。