¿Cómo agregar el control wpf a una fila y celda en cuadrícula en particular durante el tiempo de ejecución?
user-interface dynamic (2)
Las propiedades Grid.Row y Grid.Column son propiedades adjuntas , y como tales no se configuran como las propiedades normales de .net. La forma correcta de establecerlos desde el código es:
Grid.SetRow(someLabel, 0);
Grid.SetColumn(someLabel, 0);
Debería poder hacer esto antes o después de agregarlos a la colección Children del objeto Grid, pero configurarlos antes de agregar el control debería evitar cualquier posible parpadeo.
Tengo la siguiente cuadrícula en mi "Ventana" de WPF (sí, la clase de Ventana);
<Grid Name="RequiredGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="70" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
</Grid>
Dependiendo de lo que se pase a la ventana, quiero agregar elementos a esta cuadrícula una fila a la vez. Es decir, quiero agregar una etiqueta en la columna izquierda y un cuadro de texto en la columna derecha. Creo que sé cómo agregar nuevas filas para almacenar datos nuevos haciendo lo siguiente en el código que se encuentra detrás:
RequiredGrid.RowDefinitions.Add(new RowDefinition());
El problema es que, después de haber creado mi etiqueta y mi TextBox.
Label AttrLabel = new Label();
TextBox AttrTextBox = new TextBox();
Realmente no sé cómo introducirlo en la ventana para que se muestre. He visto algunos hilos que dicen, haz algo como esto:
this.Controls.Add(AttrLabel);
this.Controls.Add(AttrTextBox);
Hay dos problemas con esto. 1) Mi clase de Windows no tiene esta propiedad de "Controles" o lo que sea. Y 2) Esto no me ayudaría a especificar la fila y la columna de cada elemento de la interfaz de usuario.
Ahora en XAML, sería fácil especificar la fila y la columna con algo como esto:
<Label Grid.Column="0" Grid.Row="0"/>
Esto derrota la "dinamismo" de mi intención aquí, sin embargo. ¿Alguien sabe cómo puedo hacer que mis elementos de UI creados dinámicamente se muestren en mi ventana y especificar qué fila y columna aparecerán en la cuadrícula?
- Crea la cuadrícula (
<yourGrid>
) y las definiciones de fila como lo has hecho. Crea el control (
<yourcontrol>
). A continuación, establezca el ColumnSpan y la fila de la cuadrícula:Grid.SetColumnSpan(<yourControl>, 3); Grid.SetRow(<yourControl>, 0);
Luego agrega tu control a la cuadrícula que has creado.
<yourGrid>.Children.Add(<yourControl>);