2017-04-26 1 views
0

Ich habe Xaml für die Anzeige von Videodateien in einem Raster mit 3 Spalten geschrieben. Ich verwendet habe XAML wie folgt:Dynamische Anzahl von RowDefinition an ein Raster in einem ItemsPanelTemplate binden

 <ItemsControl Name="icTodoList" Grid.IsSharedSizeScope="True" ItemsSource="{Binding items}" Grid.Row="0" Grid.Column="0" > 
         <ItemsControl.ItemsPanel> 
           <ItemsPanelTemplate > 
            <Grid x:Name="icTooList" Margin="100,0,100,0" Style="{Binding Path=Style}"> 
            <Grid.ColumnDefinitions> 
             <!--Whatever I do I can't get the screen to resize and the cols to have the same width--> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="A" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="A" /> 
             <ColumnDefinition Width="Auto" SharedSizeGroup="A" /> 
            </Grid.ColumnDefinitions> 
             <Grid.RowDefinitions> 
             <RowDefinition Height="Auto"></RowDefinition> 
<RowDefinition Height="Auto"></RowDefinition> 
<RowDefinition Height="Auto"></RowDefinition> 
<RowDefinition Height="Auto"></RowDefinition> 
            </Grid.RowDefinitions> 
           </Grid> 
          </ItemsPanelTemplate> 
         </ItemsControl.ItemsPanel> 
         <ItemsControl.ItemTemplate> 
          <DataTemplate> 
           <Grid Margin="40,0,40,30"> 
            <TextBlock HorizontalAlignment="Center" Margin="0,0,0,0"> 
              <Hyperlink TextDecorations="None" NavigateUri="{Binding UriPath}" RequestNavigate="Hyperlink_RequestNavigate" 
                 CommandParameter="{Binding ElementName=myImg}"> 
                  <Image Width="120" Height="120" x:Name="myImg" Source="{Binding Source}" Margin="5"/> 
              </Hyperlink> 
            </TextBlock> 
            <TextBlock Margin="0,120,0,0" HorizontalAlignment="Center"> 
               <TextBlock FontSize="20px" Text="{Binding Title}" Foreground="white"></TextBlock> 
             </TextBlock> 
           </Grid> 
          </DataTemplate> 
         </ItemsControl.ItemTemplate> 
         <ItemsControl.ItemContainerStyle> 
          <Style> 
           <Style.Setters> 
            <Setter Property="Grid.Row" Value="{Binding GridRow}" /> 
            <Setter Property="Grid.Column" Value="{Binding GridColumn}" /> 
           </Style.Setters> 
          </Style> 
         </ItemsControl.ItemContainerStyle> 
        </ItemsControl> 

Hier habe ich RowDefinition wie unten

<Grid.RowDefinitions> 
             <RowDefinition Height="Auto"></RowDefinition> 
<RowDefinition Height="Auto"></RowDefinition> 
<RowDefinition Height="Auto"></RowDefinition> 
<RowDefinition Height="Auto"></RowDefinition> 
            </Grid.RowDefinitions> 

ich schon von RowDefinition müssen in Backend gefunden Zahlen wie unten

void setaligned() 
      { 
       int currentColumn = 0; 
       int currentRow = 0; 

       foreach (BindingFilesContent checkBoxItem in items) 
       { 
        checkBoxItem.GridColumn = currentColumn; 
        checkBoxItem.GridRow = currentRow; 
        if (currentColumn != 2) 
        { 
         currentColumn++; 
        } 
        else 
        { 
         currentRow++; 
         currentColumn = 0; 
        } 
      } 
} 

verwendet haben Aber ich brauche um diese RowDefinition dynamisch in Grid zu binden. Ich habe es versucht, aber ich arbeite nicht für mich. Auf folgende Frage kommentiert, antwortete niemand.

How can I dynamically add a RowDefinition to a Grid in an ItemsPanelTemplate?

+0

Ich denke, dass die Antwort, die Sie derjenige verknüpft ist, dass Sie benötigen, folgen Sie einfach den offiziellen Leitfaden für angebracht Eigenschaften in ihm verbunden ist. – Seididieci

+0

Können Sie die Syntax schreiben, die Sie schreiben möchten? – AnjumSKhan

+0

Ich weiß nicht, wie man schreibt .. Ich muss RowDefinition mit mehreren Malen basierend auf rowcount hinzufügen. –

Antwort

1

Ich habe die Uniform und binden die Zeilen, zu finden unter Code verwendet, um Zeilen dynamisch zu binden.

XAML:

<UniformGrid Columns="3" Rows="{Binding RowCount}"> 
    </UniformGrid> 

C#

List<PartList> items1 = new List<PartList>(); 

int currentRow = 10; 

items1.Add(new PartList() { RowCount = currentRow }); 

public class PartList 
{ 
      public int RowCount { get; set; } 
} 
Verwandte Themen