2011-02-14 16 views
29

Estoy acostumbrado a Windows Forms pero no a WPF. Como creo que WPF tiene grandes ventajas, estoy tratando de usarlo en mis nuevos proyectos.WPF: Agregar controles desde el código

Mi problema es el siguiente: Tengo una bruja archivo XML me dice que los controles que tengo que añadir a un formulario, pero este XML podría cambiar por lo que necesito:

  1. leer el archivo XML (Resuelto , No hay problema)
  2. Crea un formulario WPF personalizado con los datos que he leído.

¿Es posible? ¿O debería usar Windows Forms?

Respuesta

58

Sí Es posible.

WPF ofrece varias formas de crear controles en Xaml o en código.

Para su caso, si necesita crear dinámicamente sus controles, tendrá que crearlos en el código. Puede crear tu control directamente a través de sus constructores como en:

 // Create a button. 
     Button myButton= new Button(); 
     // Set properties. 
     myButton.Content = "Click Me!"; 

     // Add created button to a previously created container. 
     myStackPanel.Children.Add(myButton); 

O puede crear sus controles como una cadena que contiene xaml y utilizar un XamlReader analizar la cadena y crear el control deseado:

 // Create a stringBuilder 
     StringBuilder sb = new StringBuilder(); 

     // use xaml to declare a button as string containing xaml 
     sb.Append(@"<Button xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
          xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' "); 
     sb.Append(@"Content='Click Me!' />"); 

     // Create a button using a XamlReader 
     Button myButton = (Button)XamlReader.Parse(sb.ToString()); 

     // Add created button to previously created container. 
     stackPanel.Children.Add(myButton); 

Ahora, para que uno de los dos métodos que desea utilizar realmente depende de usted.

Jean-Louis

+0

Gracias! ¡Eso es justo lo que estoy buscando! –

4

Puede agregar controles fácilmente a través del código en wpf, puede follow this article. Otra cosa que vale la pena destacar es que XAML es una forma de XML, por lo que puede guardar su XAML en un archivo XML, de esa manera no necesitaría agregar controles en el código, sin embargo, depende de la complejidad de su aplicación.

1

soy bastante nuevo en XAML, pero que añadir a la respuesta de Jean-Louis si no desea agregar los espacios de nombres a cada cadena de elementos, entonces puede hacer algo como esto utilizando las System.Windows .Markup espacio de nombres:

   ParserContext context = new ParserContext(); 
      context.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation"); 
      context.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml"); 

      string xaml = String.Format(@"<ListBoxItem Name='Item{0}' Content='{1}' />", itemID, listItems[itemID]); 
      UIElement element = (UIElement)XamlReader.Parse(xaml, context); 

      listBoxElement.Items.Add(element); 
1

Adición de controles a través del método Children.Add es la forma más rápida que he encontrado, como por ejemplo

  this.Grid.Add(new TextBox() { Text = "Babau" }); 
Cuestiones relacionadas