2017-05-03 5 views
3

Ich habe ein Fenster mit einer Schaltfläche und einem Raster in diesem Fenster mit Zeilen und Spalten Setup. Ich versuche, eine Schaltfläche zu erstellen, die beim Klicken eine weitere Zeile zum Raster hinzufügt und dann dieser Zeile ein Benutzersteuerelement zuweist.Zeilen programmgesteuert zum Raster im WPF-Fenster hinzufügen

Ich habe eine Reihe von Möglichkeiten gefunden, dies online zu Datagrids zu tun, aber nichts zum Hinzufügen einer Rowdefinition zu einem Raster. Kann jemand mit dem Code dafür helfen?

WPF so weit:

<DockPanel>   
    <Button DockPanel.Dock="Top" Height="22" x:Name="AddRow" Click="AddRow_Click"> 
     <TextBlock Text="Add Skill"/> 
    </Button> 
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="1"/> 
      <ColumnDefinition Width="1"/> 
      <ColumnDefinition Width="1"/> 
      <ColumnDefinition Width="1"/> 
      <ColumnDefinition Width="1"/> 
      <ColumnDefinition Width="1"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="1"/> 
     </Grid.RowDefinitions> 
    </Grid>   
</DockPanel> 
+0

Was spricht gegen die Verwendung eines DataGrid oder einer ListView mit GridView? Warum bestehen Sie auf einem Gitter? Beachten Sie, dass DataGrid und ListView speziell dazu gedacht sind, eine Sammlung von Daten/Inhalten/Dingen anzuzeigen, während ein Grid lediglich zum Layout von UI-Elementen dient ... – elgonzo

+0

Ich werde jeder Zeile im Grid und jedem ein Benutzersteuerelement zuweisen Die Benutzersteuerungszuweisung ist identisch, gibt dem Benutzer jedoch die Möglichkeit, einen anderen Datenfeed zu abonnieren. Anstatt also mehrere Fenster zu öffnen, um mehrere Datenfeeds anzuzeigen, können sie alle in Zeilen in einem Fenster angezeigt werden. – mrcavanaugh09

+0

Verwenden Sie dann eine ListView mit einer GridView als seine Ansicht. Die ListView zeigt eine Sammlung von Objekten an. Diese Objekte sind von einem Typ/einer Klasse, die Sie definieren würden und die einen Datenfeed darstellen. Definieren Sie Spalten für das GridView, damit die DisplayMemberBinding-Eigenschaft jeder Spalte an jedes Datenfeedobjekt gebunden wird. – elgonzo

Antwort

3

Das sollte nicht allzu schwierig sein. Ich werde illustrieren mit Code-Behind der Einfachheit halber.

<Grid x:Name="TheGrid"> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1"/> 
    </Grid.RowDefinitions> 
</Grid> 

in der Klick-Handler-Taste:

TheGrid.RowDefinitions.Add(new RowDefinition()); 

Dann fügen Sie einfach Ihre Benutzersteuerung an das Netz, und ihm die Zeilennummer zuweisen.

var uc = new MyUserControl(); 
TheGrid.Children.Add(uc); 
Grid.SetRow(uc, TheGrid.RowDefinitions.Count - 1); 
+1

Danke. das ist, was ich gesucht habe. – mrcavanaugh09

Verwandte Themen