2009-08-21 9 views
5

Como una solución a corto plazo, estoy intentando bloquear un formulario de Windows 'usercontrol' en una aplicación WPF. Veo en la vista de la aplicación WPF que puedo agregar un 'control de formulario de Windows personalizado' al proyecto y crea un control personalizado vacío, pero no puedo encontrar la manera de agregarlo. Idealmente, me gustaría saber cómo sacar el .dll del control de usuario de formularios compilados de Windows y pegarlo en la aplicación WPF, o importar el control de usuario en la aplicación WPF.¿Cómo poner un control personalizado de formularios de Windows en una aplicación WPF?

Gracias, Sam

Respuesta

7

realmente no se puede agregarlo como un control de la caja de herramientas como si pudiera por una aplicación Windows Forms. Lo que debe hacer en su lugar es "host" el control del usuario dentro de la aplicación WPF.

See how to do it on MSDN.

Aquí hay un ejemplo de cómo utilizar un cuadro de texto enmascarado (que se puede modificar fácilmente para utilizar el control personalizado):

<Window x:Class="Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
Title="HostingWfInWpf"> 
<Grid> 
    <WindowsFormsHost> 
     <wf:MaskedTextBox x:Name="mtbDate" Mask="00/00/0000"/> 
    </WindowsFormsHost> 
</Grid> 
</Window> 
+0

Probé este código exactamente como también y recibí el mismo error que mencioné anteriormente. – Shizam

+0

¿Agregó una referencia al ensamblado 'System.Windows.Forms' en su carpeta de Referencias? – Kredns

+0

Sí, los agregó a la carpeta de referencias. Miré alrededor y volví a la página que enlazaste, luego encontré que la página de arriba te muestra cómo agregar un control WF usando C# en lugar de XAML. Intenté eso y funcionó, así que por cualquier razón al hacer una aplicación web de WPF no puedo hacer que funcione a través de XAML pero sí a través de C#. http://msdn.microsoft.com/en-us/library/ms751761.aspx – Shizam

3

agregar una referencia a System.Windows.Forms y WindowsFormsIntegration a su proyecto

xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
xmlns:WindowsFormsIntegration="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration" 

Y coloque el host de Windows en la ventana.

<WindowsFormsHost Name="wfhDate" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Stretch"> 
       <WinForms:FlowLayoutPanel/> 
    </WindowsFormsHost> 

Ahora en código C#

using Forms = System.Windows.Forms; 
......................... 
Forms.FlowLayoutPanel flpPanel = this.wfhDate.Child as Forms.FlowLayoutPanel; 
// Initialize your Forms contol here. 
flpPanel.Controls.Add(yourControl); 
+0

@Lucas: copié exactamente el XAML de arriba y lo compilé sin error, todavía no puse el código C# porque quería asegurarme de que funcionaba el XAML. Ejecuté la aplicación y se bloqueó con esta excepción: System.Windows.Markup.XamlParseException no fue administrado Mensaje: No se puede crear una instancia de 'Página1' definida en el ensamblado 'WpfUploaderTwo, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = null '. La excepción ha sido lanzada por el objetivo de una invocación. Error en el archivo de marcado 'Page1.xaml' Línea 1 Posición 7. – Shizam

+0

Si saco el bit de WindowsFormsHost, funciona bien. Enlace al código y error: http://bit.ly/aGqfG – Shizam

+0

Ah, entonces estoy haciendo una 'Aplicación web WPF' no una 'Aplicación WPF', no estoy seguro si eso tiene algún efecto. – Shizam

0

respuesta de Lucas es correcto, pero quería añadir algo necesario. Si está creando una aplicación web, debe cambiar la configuración de Seguridad a Esta es una aplicación de plena confianza. No pude hacer funcionar el control WindowsFormsHost antes de hacer esto.

Cuestiones relacionadas