Saltar al contenido

¿Cómo determino si una ventana de WPF es modal?

Solución:

Hay un campo privado _showingAsDialog siempre que una ventana de WPF sea un cuadro de diálogo modal. Puede obtener ese valor a través de la reflexión e incorporarlo en un método de extensión:

public static bool IsModal(this Window window)
{
    return (bool)typeof(Window).GetField("_showingAsDialog", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(window);
}

El valor se establece en verdadero cuando la ventana se muestra como modal (ShowDialog) y se establece en falso una vez que se cierra la ventana.

De http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c95f1acb-5dee-4670-b779-b07b06afafff/

“System.Windows.Interop.ComponentDispatcher.IsThreadModal puede indicarle si el subproceso que realiza la llamada está ejecutando actualmente un hwnd modal”.

Bien, desde que mi última idea fue rechazada, lo probé. esto funciona, y lo probé en una nueva aplicación WPF, así que sé que funciona:

En el evento Loaded de mi ventana principal (Window1), hice:

Dim frm As New Window2
frm.ShowDialog()

En mi Window2 sombreé el método ShowDialog ()

Private _IsModal As Boolean = False 'This will be changed in the IsModal method

Public Property IsModal() As Boolean
  Get
    Return _IsModal
  End Get
  Set(ByVal value As Boolean)
    _IsModal = value
  End Set
End Property

Public Shadows Sub ShowDialog()
  IsModal = True
  MyBase.ShowDialog()
End Sub

En mi evento Loaded, activé un cuadro de mensaje para asegurarme de que la propiedad IsModal se cambiara de False a True y me da True, así que sé que IsModal se configuró. MyBase.ShowDialog () luego obliga a que la clase base se cargue como modal. Shadows nos permite anular el comportamiento predeterminado a pesar de que el método ShowDialog () no se declaró como anulable.

Si bien no se “autodetermina”, no requiere que pases ningún valor booleano desde el exterior, y no requiere que establezcas el IsModal desde fuera, lo establece dentro de sí mismo, es accesible desde el exterior si así lo deseas. eligió usarlo de esa manera. Establece el valor solo si se cargó usando el método ShowDialog () y no si usa el método Show (). Dudo que encuentre un método mucho más simple para hacer esto.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

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