2016-04-21 6 views
2

Ich habe folgendes Gitter in der XAML-Datei:Wie fügt man programmgesteuert in WPF eine Bildlaufleiste zu einem Raster hinzu?

<Grid x:Name="gridPMP" HorizontalAlignment="Left" Height="285" Margin="23,116,0,-330" Grid.Row="1" VerticalAlignment="Top" Width="1238"/> 

Das Gitter programmatisch mit diesem Code CS- gefüllt ist:

public void loadPMPTable() 
    { 
     gridPMP.Children.Clear(); 
     gridPMP.RowDefinitions.Clear(); 
     gridPMP.ColumnDefinitions.Clear(); 

     MetodosAux aux = new MetodosAux(); 
     String s = problemName.Content.ToString(); 
     String listaPath = "./DataSaved/" + s + "/ListaDeMateriales.txt"; 
     String arbolPath = "./DataSaved/" + s + "/ArbolDeMateriales"; 
     String RIPath = "./DataSaved/" + s + "/RegistroInventarios.txt"; 

     int cols = NumValue + 1; 
     int rows = aux.numeroLineasFichero(listaPath) + 1; 

     FileStream fs = new FileStream(listaPath, FileMode.Open, FileAccess.Read); 
     System.IO.StreamReader file = new System.IO.StreamReader(fs); 

     String linea; 

     for (int x = 0; x < cols; x++) 
     { 
      ColumnDefinition CD = new ColumnDefinition(); 
      if (x==0) 
      { 
       CD.Width = new System.Windows.GridLength(120); 
      } 
      else 
      { 
       CD.Width = new System.Windows.GridLength(30); 
      } 
      //CD.Width = GridLength.Auto; 
      gridPMP.ColumnDefinitions.Add(CD); 
     } 
     for (int y = 0; y < rows; y++) 
     { 
      RowDefinition r = new RowDefinition(); 
      //r.Height = GridLength.Auto; 
      r.Height= new System.Windows.GridLength(30); 
      gridPMP.RowDefinitions.Add(r); 
     } 

     for (int x = 0; x < cols; x++) 
     { 
      for (int y = 0; y < rows; y++) 
      { 
       if ((y == 0) && (x == 0)) //y=row index, x=column index 
       { 
        TextBox t = new TextBox(); 
        t.Width = 170; 
        t.IsReadOnly = true; 
        t.Text = "Elemento/Día"; 
        t.FontWeight = FontWeights.UltraBold; 
        Grid.SetColumn(t, x); 
        Grid.SetRow(t, y); 
        gridPMP.Children.Add(t); 

       } 
       else if ((y == 0) && (x >= 1)) 
       { 
        TextBox t = new TextBox(); 
        t.Width = 170; 
        t.IsReadOnly = true; 
        t.Text = x.ToString(); 
        t.FontWeight = FontWeights.UltraBold; 
        Grid.SetColumn(t, x); 
        Grid.SetRow(t, y); 
        gridPMP.Children.Add(t); 
       } 
       else if (x == 0) 
       { 
        TextBox t = new TextBox(); 
        t.Width = 170; 
        t.IsReadOnly = true; 
        linea = file.ReadLine(); 
        t.Text = linea; 
        t.FontWeight = FontWeights.DemiBold; 
        Grid.SetColumn(t, x); 
        Grid.SetRow(t, y); 
        gridPMP.Children.Add(t); 
       } 
       else 
       { 
        TextBox tb = new TextBox(); 
        tb.PreviewTextInput += textBoxValidator; 
        tb.Width = 170; 
        tb.Text = "0"; 
        Grid.SetColumn(tb, x); 
        Grid.SetRow(tb, y); 
        gridPMP.Children.Add(tb); 
       } 
      } 
     } 
     file.Close(); 
     fs.Close(); 
    }//end loadPMPTable() 

Die Anzahl der Spalten und Reihen auf der Struktur einiger je ändern Dateien. Wenn also mehr als 8 Zeilen vorhanden sind, zeigt das Raster die Daten nicht an, da nicht genügend Platz vorhanden ist. Deshalb möchte ich das Raster rollbar machen. Wie kann ich das programmatisch oder aus der XAML-Datei machen? Ich habe es aus der XAML-Datei versucht, aber ich habe es nicht zum Laufen gebracht.

Antwort

2

können Sie legte es in einem ScrollViewer:

<ScrollViewer> 
    <Grid x:Name="gridPMP" HorizontalAlignment="Left" Height="285" Grid.Row="1" VerticalAlignment="Top"/> 
</ScrollViewer> 
+0

Natürlich habe ich bereits versucht, dass und es funktioniert nicht. Es zeigt keine Bildlaufleiste. – Reigada

+0

Die Bildlaufleiste wird angezeigt, wenn die Breite oder Höhe Ihres Rasters größer als die Breite oder Höhe der Bildlaufleiste ist. Versuchen Sie auch, horizontalscrollbar visibility und vertical scrollbar visibility in Ihrem ScrollViewer auf True zu setzen. –

+0

P.S Wenn Sie eine Sammlung von Elementen anzeigen möchten, ist es immer besser, ein ItemsControl wie ListBox oder ListView zu verwenden, das Scrollbalken unterstützt. –

Verwandte Themen