2016-12-14 6 views
0

데이터 바인딩을 통해 데이터를 가져 오는 gridview를 만들었습니다. 내가 뭘하고 싶은지는 스크린 크기 ()에 따라 gridview 항목 너비를 동적으로 만드는 것입니다. 그들은 Windows 10 뉴스, 스포츠 앱 등에서 수행 한 것과 같습니다. 지금까지 나는 가로 창 정렬을 설정하여 시각 상태 관리자를 사용하여 최소 창 너비 0에 대해 성공적으로 수행했지만 다른 더 넓은 창 크기에 대해서는이 작업을 계속할 수 없습니다.Gridview 항목 동적 너비 UWP의 화면 크기에 따라

이 문제를 해결하기위한 도움이 필요합니다. 감사. 당신이 항목을 당신이 원하는 행 당 얼마나 많은 항목을 지정할 수 수평 공간을 채우기 위해 스트레칭하려면

+0

시각적 상태에 대한 적응 형 트리거를 잘 알고 있습니까? 지금까지 정확히 무엇을 시도해 보았고 당신을 위해 일하지 않는 것이 무엇입니까? –

+0

네, minWindowWidth를 800으로 설정하는 시각적 상태에 대한 적응 형 트리거를 사용했습니다. 같은 ItemWidth의 Item 속성을 사용하여 MinWidth를 300으로 설정했습니다. 하지만 내가하고 싶은 일은 창 너비 800 이상에서 앱의 창 크기에 따라 항목의 너비를 동적으로 변경하는 것입니다. 내가 직면하고있는 기본 문제는 setter 속성에서 너비를 정의하고 있기 때문에 더 이상 동적이 아닙니다. 어떻게이 문제를 해결합니까 ?? –

답변

3

는, 당신은의 GridView의하여 SizeChanged 이벤트에서 수동으로 ItemsWrapGrid의 ItemWidth을 설정해야합니다.

<GridView x:Name="gridView" SizeChanged="onGridViewSizeChanged"> 
    <GridView.ItemTemplate> 
     <DataTemplate> 
      <Grid Background="GreenYellow" BorderBrush="Black" BorderThickness="2"> 
       <TextBlock Text="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="40"/> 
      </Grid> 
     </DataTemplate> 
    </GridView.ItemTemplate> 

    <GridView.ItemContainerStyle> 
     <Style TargetType="GridViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
      <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
      <Setter Property="Margin" Value="0"/> 
     </Style> 
    </GridView.ItemContainerStyle> 

    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsWrapGrid Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 

    <x:String>1</x:String> 
    <x:String>2</x:String> 
    <x:String>3</x:String> 
    <x:String>4</x:String> 
    <x:String>5</x:String> 
    <x:String>6</x:String> 
    <x:String>7</x:String> 
    <x:String>8</x:String> 
</GridView> 
private void onGridViewSizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    // Here I'm calculating the number of columns I want based on 
    // the width of the page 
    var columns = Math.Ceiling(ActualWidth/300); 
    ((ItemsWrapGrid)gridView.ItemsPanelRoot).ItemWidth = e.NewSize.Width/columns; 
} 

Screenshot

당신은 아마 행동거나 연결된 속성에이 번들 수 :

다음은 예입니다.

+0

오오이 맨이 아름답습니다 !! 정확히 내가 원하는 .. 비록 약간의 문제가 여전히 존재합니다 :(:(내 gridview 데이터에 바인딩하는 피벗 컨트롤 안에 포함되어 있습니다. 결과로 나는 gridview 뒤에 코드에서 액세스 할 수 없습니다. 시각적 사용하고 있습니다. 트리는이 문제를 해결할 수있는 유일한 방법입니까? –

+1

다른 방법을 통해 GridView에 대한 참조를 가져와야합니다. http://stackoverflow.com/a/26801276/734040 –

+0

당신은 @Decade Moon ... 그 모두는하게되었다!! –