5 votos

¿Cómo hacer que una ventana WPF sea una ventana hija de ArcMap que se comporte bien?

Estoy bastante familiarizado con Windows Forms en ArcGIS pero WPF, con el que estoy empezando a juguetear, parece ser un animal diferente. He creado un complemento de ArcMap con un botón que muestra un Ventana con algunos controles en él y me gustaría mostrarlo como un diálogo modal y que se comporte como otros diálogos de ArcMap. Es decir, debería:

  1. Inicialmente se muestra centrado en el centro de la ventana de ArcMap
  2. Bloquear el hilo principal de ArcMap para que no continúe hasta que se cierre la ventana
  3. No permitir que la ventana de la aplicación ArcMap tome el foco
  4. No tener su propio botón en la barra de tareas ni aparecer en la lista de alt-tab
  5. Dibujar siempre en la parte superior de la ventana de ArcMap

Ya tengo resueltos el 1 y el 2, pero el resto aún no lo he resuelto.

¿Alguien ya ha abordado esto?

Relacionado: ¿Cómo de estable es WPF en Arcmap?

6voto

Nathan Bedford Puntos 3157

La clave para la correcta crianza de las ventanas WPF dentro de una aplicación no WPF es utilizar el WindowInteropHelper clase.

Suponga que tiene un WpfWindow que es una ventana WPF (deriva de Window ):

    private void ShowWpfWindowModal()
    {
        var parentHandle = new IntPtr(_app.hWnd); // the ArcMap window handle

        var wpfWindow = new WpfWindow(); // the WPF window instance
        var helper = new WindowInteropHelper(wpfWindow);
        helper.Owner = parentHandle;

        wpfWindow.ShowInTaskbar = false; // hide from taskbar and alt-tab list

        wpfWindow.ShowDialog();
    }

El fragmento de código anterior también muestra cómo ocultar la ventana de la barra de tareas, que es una propiedad directa del Window clase.

También cuenta con la WindowStartupLocation emum, pero su CenterOwner no funciona cuando el propietario no es una ventana WPF. Es necesario centrar la ventana manualmente en su lugar. No voy a reiterar aquí y más bien te remito a este artículo que da una descripción detallada: Centrado de ventanas WPF con ventanas propias y ajenas a WPF .

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X