yes visual type info ejemplos wpf messagebox

visual - cómo configurar wpf MessageBox.Owner en la ventana del escritorio porque SplashScreen cierra MessageBox



wpf messagebox info (7)

Estoy usando la función SplashScreen en WPF configurando la acción de compilación de un mapa de bits en Splashscreen. Detrás de la pantalla de bienvenida, se está verificando la información de licencia, y si falla, se muestra un MessageBox .

Según esta información, es porque MessageBox.Owner es la pantalla de bienvenida y tan pronto como se abre otra ventana, incluso si es un MessageBox, se cierra la ventana de la pantalla de presentación, que a su vez cierra el MessageBox, por lo que el usuario nunca ve el Buzon de mensaje.

Entonces, la solución sería configurar el MessageBox.Owner en otra ventana, pero eso significaría que tengo que crear una instancia de otra ventana que incluso podría no necesitarse.

¿Sería posible configurar el MessageBox.Owner en la ventana del escritorio? Y cómo, porque la única otra función que se me viene a la mente es la función api GetDesktopWindow () , pero que devuelve un identificador de ventana y MessageBox.Owner es una ventana de WPF.


Esto no está directamente relacionado con la situación del OP, pero podría ser útil para otras personas que tienen problemas con el MessageBox oculto detrás de otras ventanas en ciertas situaciones especiales.

Como @dthrasher menciona, una solución es usar una ventana falsa oculta. Pero a veces incluso eso no es suficiente. Tuve una situación en la que la solución no era solo usar una ventana oculta oculta, sino activar su propiedad TopMost cada vez que la usaba con MessageBox.

_formKludge.TopMost = true; MessageBox.Show(_formKludge, "Nice informative message.", "Super-duper Program", MessageBoxButtons.OK, MessageBoxIcon.Error); _formKludge.TopMost = false;


¿Puedes publicar algún código? Intenté agregar esto al archivo App.xaml.cs en una nueva aplicación WPF:

protected override void OnStartup(StartupEventArgs e) { if (MessageBox.Show("Start app?", "Confirm Start", MessageBoxButton.YesNo) == MessageBoxResult.No) { this.Shutdown(); return; } this.StartupUri = new Uri("Window1.xaml", UriKind.Relative); base.OnStartup(e); }

... y funciona como se esperaba (el mensaje "Confirmar inicio" permanece abierto hasta que responda, y si hago clic en "No", la aplicación se apaga).



esto me ha ayudado mucho ... Me ha dado una idea nueva, pero el código de ejemplo que he visto aquí requiere algunas modificaciones

Aquí hay un ejemplo simple en wpf con modificación ahora está funcionando

al hacer clic en el botón

pegar este código

if (System.Windows.Forms.MessageBox.Show ("are you sure", "delete", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms. DialogResult.Sí) {this.Close (); } else {MessageBox.Show ("por qué no eliminar"); }



Me surgió esta solución, así que tal vez hay algo mal con eso, pero parece funcionar perfectamente:

Window temp = new Window() { Visibility=Visibility.Hidden }; temp.Show(); MessageBox.Show(temp, "An error occurred before the application could start./n/nTechnical Details: " + ex.Message, "Fatal Error", MessageBoxButton.OK, MessageBoxImage.Stop); App.Current.Shutdown(1);


Dado que usar la ventana del escritorio como padre de tus diálogos modales no es una buena idea, como señaló @Nir en su respuesta, aquí hay otras tres soluciones:

1) Use una ventana oculta. Cree una pequeña ventana no modal para actuar como padre de su MessageBox u otro cuadro de diálogo modal. Este enfoque se describe aquí:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/116bcd83-93bf-42f3-9bfe-da9e7de37546/

2) Crear ventanas de mensajes no modales. Cambia tu modo de inicio a apagado explícito y utiliza una ventana no modal para mostrar tu mensaje. Este enfoque se describe en la respuesta a esta pregunta de :

MessageBox con detalles de excepción desaparece inmediatamente si usa la pantalla de bienvenida en WPF 4.0

3) Llamar a MessageBox dos veces. Aparentemente, el problema solo afecta el primer diálogo modal que se muestra. Entonces, simplemente puede llamar a su cuadro de diálogo modal dos veces, si no le importa el destello de la primera apertura y cierre.

https://connect.microsoft.com/VisualStudio/feedback/details/600197/wpf-splash-screen-dismisses-dialog-box

Personalmente, no me gusta ninguna de estas soluciones. La única otra opción es evitar la funcionalidad integrada de SplashScreen y lanzar la suya desde cero. Aquí hay un enlace si desea investigar más esa ruta:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/8dd49fd0-9cc9-43c6-b285-6f119ab8a32e/

Finalmente, si está tan molesto con este problema como yo, puede votar para que Microsoft solucione este error aquí:

http://connect.microsoft.com/VisualStudio/feedback/details/600197/wpf-splash-screen-dismisses-dialog-box