Controles Winform en WPF

De vuelta de vacaciones, empezamos de nuevo a escribir sobre WPF, como siempre que me voy de vacaciones vuelvo con cientos de correos, llamadas telefónicas y problemas, parecen que te castigan si te vas de vacaciones y que cuando vuelves intentan hacerte lo mas dura posible la vuelta, intentaremos seguir escribiendo un post diario pero me temo que este mes va a ser un poco difícil.

Una de las características que al principio no le di mucha importancia pero que luego me ha resultado útil es la de poder hostear controles Winforms dentro de mis aplicaciones de WPF y al revés controles WPF dentro de mis antiguas aplicaciones de WinForm.

Para hostear un control Winform dentro de mis aplicaciones WPF el FrameWork nos provee de la clase WindowsFormsHost que nos va a permitir realizar un hosting de un control WinForm dentro de nuestras aplicaciones de WPF.

Para utilizarlo debemos de incluir la referencia al assembly System.Windows.Forms y a WindowsFormsIntegration

 

image

Como ejemplos vamos a utilizar un DataGrid dentro de nuestra aplicación, el XAML seria

 

  1. <Window x:Class=»WpfWinFormsInterop.Window1″
  2.    xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation»
  3.    xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml»
  4.    xmlns:WinForms=»clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms»
  5.    Title=»Window1″ Height=»300″ Width=»300″>
  6.     <Grid x:Name=»root»>
  7.         <Grid.RowDefinitions>
  8.             <RowDefinition Height=»*»></RowDefinition>
  9.             <RowDefinition Height=»20″></RowDefinition>
  10.         </Grid.RowDefinitions>
  11.         <WindowsFormsHost Grid.Row=»0″>
  12.             <WinForms:DataGridView x:Name=»_MyDataGrid»>
  13.             </WinForms:DataGridView>
  14.         </WindowsFormsHost>
  15.         <Button Grid.Row=»1″ Click=»Button_Click» HorizontalAlignment=»Right»>
  16.            Limpiar Filas
  17.         </Button>
  18.     </Grid>
  19. </Window>

En el XAMl vemos como referenciamos al assembly winforms pudiendo insertar el DataGrid dentro de nuestra aplicación WPF.

 

Ahora podemos utilizar el DataGrid desde el código c# como cualquier control.

  1. public partial class Window1 : Window
  2.     {
  3.         public Window1()
  4.         {
  5.             InitializeComponent();
  6.             System.Windows.Forms.DataGridViewColumn col;
  7.             col = new System.Windows.Forms.DataGridViewColumn();
  8.             col.CellTemplate = new System.Windows.Forms.DataGridViewTextBoxCell();
  9.             col.Name = «Columna 1»;
  10.             _MyDataGrid.Columns.Add(col);
  11.             col = new System.Windows.Forms.DataGridViewColumn();
  12.             col.CellTemplate = new System.Windows.Forms.DataGridViewTextBoxCell();
  13.             col.Name = «Columna 2»;
  14.             _MyDataGrid.Columns.Add(col);
  15.             _MyDataGrid.Rows.Add(new object[] { «Oscar», «Alvarez» });
  16.             _MyDataGrid.Rows.Add(new object[] { «Jorge», «Elorza» });
  17.         }
  18.         private void Button_Click(object sender, RoutedEventArgs e)
  19.         {
  20.             _MyDataGrid.Rows.Clear();
  21.         }
  22.     

 

El resultado seria

 

image

 

Fácil de utilizar y que nos servirá para reutilizar controles complejos que tengamos hechos en Winforms mientras los trasladamos a WPF

3 comentarios sobre “Controles Winform en WPF”

  1. hola me gustaria saber ¿como es que se puede utilizar una herramienta COM component de winform en wpf..

    he visto como se insertar controles comunes pero la verdad necesito saber como agregar un control que obtengo al hacer la referencia a un libreria,el nombre del control es
    «VaxSIPUserAgentOCX Control»

    si me pudieras ayudar te lo aggrdeceria muchisimo ya tengo ratoq ueriendo hacer eso, y ahun no lo he podido realizar

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *