2016-08-09 20 views
1

私はそうのように定義された、私のXamarinアプリでリストビューを持っている:私はサイズを変更した場合Xamarin ListViewで画面のサイズを変更せずに自動的に行のサイズを変更するにはどうすればよいですか?

ListView with clipped rows

:私は最初にそのItemsSourceプロパティを設定すると

 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 
       }; 
      }) 
     }; 

、行がそうのようにクリップされ画面は、正しいサイズにリサイズされます。

ListView with resized rows ItemsSourceを再び変更すると、クリップされてしまうことになります。 UpdateChildrenLayoutまたはForceLayoutを呼び出しても効果はありません。

ユーザーにウィンドウのサイズ変更を要求せずに、ListViewで行のサイズを正しく設定するにはどうすればよいですか?それはモバイルで厳しい要求になるだろう!

答えて

2

ListViewがフルスクリーンの場合は、VerticalOptions=FillAndExpandと設定します。 RowHeightを静的に設定しないでください。 HasUnevenRows=trueがあるので、その内部のコンテンツのサイズに応じて異なる行のサイズが異なります。 また、リストビューのItemTemplate内のコントロールにはVerticalOptionsを指定し、適切なサイズにします。

関連する問題