2009-09-04 13 views
8

Tengo una ventana que a veces abro usando Show() y algunas veces usando ShowDialog(). En el segundo caso, el resultado del diálogo devuelto es importante para mí. Pero si configuro el DialogResult después de llamar al Show() obtengo un InvalidOperationException. ¿Hay alguna forma de averiguar qué método se utilizó para abrir la ventana y establecer o no el DialogResult en consecuencia? ¿O hay otra manera?Configuración de DialogResult solo después de ShowDialog() en WPF

Por supuesto que sé que puedo detectar e ignorar la excepción, pero no me gusta esta solución.

Respuesta

9

Use System.Windows.Interop.ComponentDispatcher.IsThreadModal dentro de la ventana para determinar si se ejecuta en un subproceso modal o no.

+0

Gracias, eso es exactamente lo que quería. – svick

+0

No siempre funciona, en nuestro caso tuvimos que ajustar DialogResult = x; llamar en un try/catch para un comportamiento apropiado. – Doug

0

¿Qué le parece simplemente establecer this.DialogResult = DialogResult.blah en el evento de cierre del formulario?

+1

¿Cómo sería útil? Eso aún lo establecería incluso después de Show() y provocaría la excepción. BTW Uso WPF (no lo especifiqué claramente) por lo que DialogResult es bool ?. – svick

+0

antes de hacer esto. Cerrar(); en la ventana modal establecí this.DialogResult = DialogResult.OK; y en la forma principal esto es exactamente lo que obtengo. Gracias sgrassie :) – balexandre

3

Si mira set_DialogResult en Reflector, comprueba _showingAsDialog para determinar si el diálogo es modal. Lamentablemente, este es un campo privado.

¿Siempre construye una nueva instancia de la ventana antes de llamar a Show()/ShowDialog(). Si es así, podría pasarle un argumento al constructor indicándole cómo se mostrará.

2

Puede usar la propiedad Form.Modal para verificar el tipo de uso.

En el caso de utilizar Form.Show(), debe utilizar otra forma para que la persona que llama sepa los resultados del formulario.

¿Hay alguna razón para usar ambas formas de mostrar el formulario?

+2

Esa propiedad no existe en WPF – McAden

Cuestiones relacionadas