2017-10-05 12 views
1

ListViewとLabelをすぐ後に配置しますが、画面上にListViewとLabelの間に空白があります。です。 ListView Windows 10 MobileXamarin.Forms:StackView内のListView:ListViewのサイズを自動的に変更する方法は?

ListView Android アイテムが存在しているとき、私は、自動的に拡大するListViewコントロールをしたいと思います。 WPFのようなItemsControlはありますか?

私はこのXAMLを持っている:

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:local="clr-namespace:Forms"    
      x:Class="Forms.MainPage"> 
    <ContentPage.Resources> 
     <ResourceDictionary> 
      <local:MyConverter x:Key="MyConverter"></local:MyConverter> 
     </ResourceDictionary> 
    </ContentPage.Resources> 
    <ScrollView Orientation="Vertical"> 
     <StackLayout Padding="10,10,10,10"> 
      <Label FontSize="20" FontAttributes="Bold">Cartão de Ponto</Label> 
      <Label>Nome:</Label> 
      <Label Text="{Binding Path=Pessoa.Nome}" /> 
      <Label>CPF:</Label> 
      <Label Text="{Binding Path=Pessoa.CPF}" /> 

      <Grid Padding="0" MinimumHeightRequest="40"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="70" /> 
        <ColumnDefinition Width="35" /> 
        <ColumnDefinition Width="60" /> 
        <ColumnDefinition Width="60" /> 
        <ColumnDefinition Width="60" /> 
       </Grid.ColumnDefinitions> 
       <Label FontSize="10" Text="Data" FontAttributes="Bold" VerticalTextAlignment="End" /> 
       <Label FontSize="10" Grid.Column="1" Text="Dia" FontAttributes="Bold" VerticalTextAlignment="End" /> 
       <Label FontSize="10" Grid.Column="2" Text="Hora Entrada" FontAttributes="Bold" VerticalTextAlignment="End" /> 
       <Label FontSize="10" Grid.Column="3" Text="Hora Saída" FontAttributes="Bold" VerticalTextAlignment="End" /> 
       <Label FontSize="10" Grid.Column="4" Text="Horas Trabalhadas" HorizontalTextAlignment="End" FontAttributes="Bold" /> 
      </Grid> 

      <!-- HeightRequest="0"--> 
      <ListView x:Name="lv1" ItemsSource="{Binding Path=Pontos}" 
         VerticalOptions="FillAndExpand" 
         HasUnevenRows="False" 
         > 
       <ListView.Header> 
        <StackLayout HeightRequest="0" /> 
       </ListView.Header> 
       <!-- ItemTemplate --> 
       <ListView.Footer> 
        <StackLayout HeightRequest="0" /> 
       </ListView.Footer> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <ViewCell> 
          <ViewCell.View> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="70" /> 
             <ColumnDefinition Width="35" /> 
             <ColumnDefinition Width="60" /> 
             <ColumnDefinition Width="60" /> 
             <ColumnDefinition Width="60" /> 
            </Grid.ColumnDefinitions> 
            <Label FontSize="12" Text="{Binding Path=Data, StringFormat='{0:dd/MM/yyyy}'}" /> 
            <Label FontSize="12" Grid.Column="1" Text="{Binding Path=DiaSemana}" /> 
            <Label FontSize="12" Grid.Column="2" Text="{Binding Path=HoraEntrada}" /> 
            <Label FontSize="12" Grid.Column="3" Text="{Binding Path=HoraSaida}" /> 
            <Label FontSize="12" Grid.Column="4" Text="{Binding Path=HorasTrabalhadas, Converter={StaticResource MyConverter}}}" /> 
           </Grid> 
          </ViewCell.View> 
         </ViewCell> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
      <!-- Why is this White space on screen? --> 
      <StackLayout Orientation="Horizontal"> 
       <Label x:Name="lbl1" /> 
       <Label>ms</Label> 
      </StackLayout> 

      <Button x:Name="ButtonPegaCartaoPonto" Text="Carregar" /> 

      <Label></Label> 
      <Label></Label> 
     </StackLayout> 
    </ScrollView> 
</ContentPage> 

しかし、リストビューLV1は自動的にアイテムに合わせて横方向に拡張しません。

これを行う方法?あなたのListViewコントロールと、このようなあなたのコンストラクタでの背後にあるコードを使用して、リストの更新高さのプロパティをrowHeightの

答えて

1

セット:

lv1.PropertyChanged += (object sender, System.ComponentModel.PropertyChangedEventArgs e) => 
      { 
       if (e.PropertyName == "ItemsSource") 
       { 
        try 
        { 
         if (lv1.ItemsSource != null) 
         { 
          var tmp = (IList) lv1.ItemsSource; 
          lv1.HeightRequest = tmp.Count * lv1.RowHeight; 
         } 
        } 
        catch (Exception ex) 
        { 

        } 
       } 
      }; 

OR

ます。また、行の高さに基づいて特定のheighを置くことができます。

lv1.PropertyChanged += (object sender, System.ComponentModel.PropertyChangedEventArgs e) => 
       { 
        if (e.PropertyName == "ItemsSource") 
        { 
         try 
         { 
          if (lv1.ItemsSource != null) 
          { 
           var tmp = (IList) lv1.ItemsSource; 
           lv1.HeightRequest = tmp.Count * 40; 
          } 
         } 
         catch (Exception ex) 
         { 

         } 
        } 
       }; 
+0

私はそれを試してここに伝えます。 – Tony

関連する問題