Problema: ¿Cómo le hago para generar controles de WPF en tiempo de ejecución? bueno pues la manera en cómo yo lo necesitaba era a través de XAML, es decir, tengo una clase que se encargada de generar el XAML y que se encuentra fuera de la ventana principal, es decir, no tiene referencias hacia System.Windows.blahblahblah, de esta manera una vez que se genera el XAML guardo esto en un string común y corriente y se lo paso a la ventana para que lo agregue a su grid principal.
Los controles a generar son:
TextBox
Button
Label
Generar el XAML es lo más sencillo, ésto es:
<grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" x="http://schemas.microsoft.com/winfx/2006/xaml">
<textbox width="68.4" name="UC_0" margin="115.2,14.4,0,0" verticalalignment="Top" horizontalalignment="Left" height="23"></textbox>
<label width="105.6" name="Lbl_0" margin="27.6,16,0,0" verticalalignment="Top" horizontalalignment="Left" height="23">Operador: </label>
<button name="bnNextWindow" width="75" margin="12,0,0,12" verticalalignment="Bottom" horizontalalignment="Left" height="23">Siguiente</button>
</grid>
Solución:
Ahora viene lo bueno, ¿cómo hago para que éste XAML se muestre en la ventana?
string xaml = "<Grid xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">";
xaml += "<TextBox Width="68.4" Name="UC_0" Margin="115.2,14.4,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Height="23"></TextBox>";
xaml += "<Label Width="105.6" Name="Lbl_0" Margin="27.6,16,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Height="23">Operador: </Label>";
xaml += "<Button Name="bnNextWindow" Width="75" Margin="12,0,0,12" VerticalAlignment="Bottom" HorizontalAlignment="Left" Height="23">Siguiente</Button>";
xaml += "</Grid>";
StringReader reader = new StringReader(xaml);
XmlReader xml = XmlReader.Create(reader);
this.Content = XamlReader.Load(xml);
Finalmente al correr el programa nos queda esto:
Referencias:
System.Windows.Markup
System.IO
System.Xml
Juan, un favor, podrías subir tu ejemplo completo?, me tengo la necesidad de hacer algo similar
ResponderEliminar