2016-12-14 6 views
0

Ich habe eine Gridview erstellt, die Daten durch Datenbindung erhält. Was ich als nächstes machen möchte ist, dass die Gridview-Item-Breite entsprechend der Bildschirmgröße dynamisch wird (Wie sie es in den Windows 10 News, Sport-App, etc. gemacht haben). Bisher habe ich es erfolgreich für minimale Fensterbreite 0 mit visual state manager getan, indem ich die horizontale Ausrichtung auf dehnen eingestellt habe, aber ich bin nicht in der Lage, dies für andere breitere Fenstergrößen fortzusetzen.Gridview Item dynamische Breite nach Bildschirmgröße in UWP

Jede Art von Hilfe zum Aussortieren wird geschätzt. Vielen Dank.

+0

Kennen Sie adaptive Trigger für die visuellen Zustände? Was genau hast du bisher versucht und was funktioniert nicht für dich? –

+0

Ja, ich habe adaptive Trigger für die visuellen Zustände verwendet, die minWindowWidth auf 800 setzen. Ich habe die Setter-Eigenschaft in derselben verwendet, um das Element MinWidth auf 300 zu setzen, das funktioniert. Aber was ich tun möchte, ist dynamisch die Breite des Artikels ändern sich entsprechend der Fenstergröße unserer App ab der Fensterbreite 800 und höher. Das grundlegende Problem, mit dem ich konfrontiert bin, ist, dass, da ich die Breite in der Setter-Eigenschaft definiere, diese nicht mehr dynamisch ist. Wie behebe ich dieses Problem? –

Antwort

3

Wenn Sie die Einzelteile wünschen, strecken den horizontalen Raum zu füllen und der Lage sein, festzulegen, wie viele Elemente pro Zeile, die Sie wollen, dann werden Sie die ItemWidth der ItemsWrapGrid manuell innerhalb des Sizechanged-Ereignis des Gridview setzen müssen.

Hier ist ein Beispiel:

<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

Sie könnten wahrscheinlich diese in ein Verhalten bündeln oder angefügten Eigenschaft zu.

+0

Oohhh Mann das ist schön !! genau das, was ich wollte .. Obwohl ein kleines Problem immer noch besteht :(:(Meine Gridview ist in einem Pivot-Steuerelement enthalten, die an eine Daten bindet. Als Ergebnis kann ich nicht auf den Gridview von dem Code hinter zugreifen. Verwendet eine visuelle Baum die einzige Möglichkeit, um dieses Problem zu lösen? –

+1

Sie müssen einen Verweis auf die GridView über andere Mittel erhalten. Siehe http://stackoverflow.com/a/26801276/734040 –

+0

Sie der Mann @ Dekade Moon ... Es ist alles fertig!! –

Verwandte Themen