WPF and Windows Forms Host

Estoy desarrollando una aplicación que lee huellas digitales. La idea de este producto es que cuando tu pases tu dedo sobre el lector de huellas conozca quien eres y te permita o no el acceso a las premisas. Esto es parte de un producto que Intellekt está desarrollando.

Ya sé, ya sé… no es nada nuevo y hay muchos de esos en el mercado. El chiste es que no hay ninguno que utilice .NET Framework 2.0 que haga esto y además usa Windows Presentation Foundation para mostrar la entrada y salida de las personas…

El tema de esto, es que dentro del SDK que estoy utilizando se usa un ActiveX que permite la interacción con el dispositivo. Como muchos saben, no se puede poner directamente un control WinForms en un canvas de WPF debido a que son tecnologías completamente diferentes… para esto se necesita usar interoperabilidad (conocida en el bajo mundo como Crossbow).

Para lograr interactuar con mi ActiveX dentro de WPF tuve que hacer lo siguiente:

  1. Creamos un nuevo UserControl y dentro de este tiré mi componente ActiveX.
  2. Después al componente hacemos un «pseudo-event bubbling» para que los eventos a los que están suscritos dentro objeto sean enviados directamente al control… [gracias a Misael por este pedazo de código]
  3. Creamos el objeto desde código atrás dentro del XAML (algo importante es que hay que usar AppStartup y AppExit para destruir los objetos).

Y listo. Dejo un segmentito de código más o menos para que vean como se realizó esto:

UserControl1.cs

public partial class ctlGrFinger : UserControl
{
public event _IGrFingerXCtrlEvents_FingerDownEventHandler FingerDown;
protected void OnFingerDown(AxGrFingerXLib._IGrFingerXCtrlEvents_FingerDownEvent e)
{
if (FingerDown != null)
      
this.FingerDown(e.idSensor);
}

Window1.xaml

void WindowLoaded(object sender, RoutedEventArgs e)
{
// CS inicializamos el componente de captura de huellas digitales
ctl.FingerDown += new GrFingerXLib._IGrFingerXCtrlEvents_FingerDownEventHandler(ctl_FingerDown);

}

Cheers! Beer [B]


Comentarios

Deja una respuesta