2017-02-03 3 views
3

すでに言及したようにhereGridViewにコンテンツを表示する際に問題があります。このarticleに基づいて、私はGridViewが最初の項目の高さに項目のHeightプロパティを設定したことを知りました。私にとっての問題は、コンテンツの高さに基づいて調整されたアプティックをHeightにしたいということです。 したがって、行の2番目の項目が最大である場合、この行のすべての項目は2番目の項目のサイズを取得する必要があります。私は、GridViewコントロールを示すために、このコードを使用しましたUWP GridView ItemHeightは、行の中で最大のアイテムに基づいています

<GridView ItemsSource="{Binding}" ScrollViewer.VerticalScrollBarVisibility="Disabled" Width="1080"> 
<GridView.ItemTemplate> 
    <DataTemplate> 
     <ItemsControl ItemsSource="{Binding ListData, Converter={StaticResource DataBindingDebugConverter}}" x:Name="BirthdayListView" HorizontalAlignment="Center" Margin="0,20,0,0"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="*"/> 
         </Grid.ColumnDefinitions> 
         <TextBlock Text="&#x1f382;" 
            FontSize="16" 
            Grid.Column="0" 
            Margin="0,0,10,10" 
            FontFamily="Sergoe UI" 
            Style="{StaticResource BasicTextBlock}"/> 
         <TextBlock Text="{Binding NameString, Converter={StaticResource DataBindingDebugConverter}}" 
            Grid.Column="2" 
            Margin="10,0,0,0" 
            FontSize="16" 
            Style="{StaticResource BasicTextBlock}"/> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </DataTemplate> 
</GridView.ItemTemplate> 
<GridView.ItemContainerStyle> 
    <Style TargetType="ContentControl"> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="Margin" Value="0,20,0,0"/> 
     <Setter Property="Width" Value="360" /> 
     <Setter Property="VerticalContentAlignment" Value="Top" /> 
    </Style> 
</GridView.ItemContainerStyle> 
</GridView> 

EDIT:カレンダーエントリが最初のエントリである場合(ゾンターク)すべてがうまくある

enter image description here

カレンダーエントリが2番目のアイテム(Montag)にある場合、それらは非表示になり、ItemHeightは増加していません。この記事に基づいて enter image description here

答えて

1

私は、GridViewコントロールは、最初のアイテムの高さの項目のHeightプロパティを設定していることが分かりました。

知られているように、GridViewの行の高さは最高の項目ではない最初の項目によって異なります。したがって、GridViewItemPanelについては、custom a panelが必要な場合があります。あなたのGridViewWidthが固定値であるため、たとえば、次のように、私たちはCustomPanelを作成することができます。

public class CustomPanel : Panel 
{ 
    private double _maxWidth; 
    private double _maxHeight; 

    protected override Size ArrangeOverride(Size finalSize) 
    { 
     var x = 0.0; 
     var y = 0.0; 
     foreach (var child in Children) 
     { 
      if ((_maxWidth + x) > finalSize.Width) 
      { 
       x = 0; 
       y += _maxHeight; 
      } 
      var newpos = new Rect(x, y, _maxWidth, _maxHeight); 
      child.Arrange(newpos); 
      x += _maxWidth; 
     } 
     return finalSize; 
    } 

    protected override Size MeasureOverride(Size availableSize) 
    { 
     foreach (var child in Children) 
     { 
      child.Measure(availableSize); 

      var desirtedwidth = child.DesiredSize.Width; 
      if (desirtedwidth > _maxWidth) 
       _maxWidth = desirtedwidth; 

      var desiredheight = child.DesiredSize.Height; 
      if (desiredheight > _maxHeight) 
       _maxHeight = desiredheight; 
     }    
     var itemperrow = Math.Floor(availableSize.Width/_maxWidth); 
     var rows = Math.Ceiling(Children.Count/itemperrow); 
     return new Size(itemperrow * _maxWidth,_maxHeight * rows); 
    } 
} 

そして、次のようにXAMLでCustomPanelGridViewItemsPanelTemplateを置き換える:

<GridView ItemsSource="{Binding}" Width="1080" > 
    <GridView.ItemTemplate> 
    ... 
    </GridView.ItemTemplate> 
    <GridView.ItemContainerStyle> 
     ... 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <local:CustomPanel />     
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</GridView> 
+0

を@ChristophHあなたは解決しましたか? –

関連する問題