Tengo un 2 monitores y una aplicación WinForm que inicia una ventana de WPF. Quiero obtener la pantalla en la que está el WinForm y mostrar la ventana de WPF en la misma pantalla. ¿Cómo puedo hacer esto?Mostrando una ventana con WPF, Winforms y monitores duales
Respuesta
WPF no incluye el práctico System.Windows.Forms. Pantalla clase, pero aún puede usar sus propiedades para realizar su tarea en su aplicación WinForms.
Supongamos que este significa la ventana de Windows Forms y _wpfWindow es una variable definida por referencia a la ventana de WPF en el ejemplo siguiente (esto sería en cualquier controlador de código configura para abrir la ventana de WPF, como algunos Button.Click manejador):
Screen screen = Screen.FromControl(this);
_wpfWindow.StartupLocation = System.Windows.WindowStartupLocation.Manual;
_wpfWindow.Top = screen.Bounds.Top;
_wpfWindow.Left = screen.Bounds.Left;
_wpfWindow.Show();
el código anterior instancia de la ventana de WPF en la esquina superior izquierda de la pantalla que contiene la ventana de Windows Forms. Le dejaré los cálculos si desea ubicarlos en otra ubicación como la mitad de la pantalla o en un estilo "en cascada" a continuación y a la derecha de la ventana de WinForms.
Otro método que consigue la ventana de WPF en el centro de la pantalla sería utilizar simplemente
_wpfWIndow.StartupLocation = System.Windows.WindowStartupLocation.CenterScreen
Sin embargo, esto no es tan flexible, ya que utiliza la posición del ratón para averiguar qué pantalla para mostrar la Ventana WPF (y obviamente el mouse podría estar en una pantalla diferente como su aplicación WinForms si el usuario la mueve rápidamente, o si usa un botón predeterminado, o lo que sea).
Editar: Here's a link to an SDK document sobre el uso de InterOp para obtener su ventana WPF centrada en la ventana que no es de WPF. Hace básicamente lo que estaba describiendo en términos de calcular las matemáticas, pero correctamente le permite configurar la propiedad "Propietario" de la Ventana de WPF usando el HWND de la Ventana.
Debería poder usar System.Windows.Forms.Screen [1] y usar el método FromControl para obtener la información de la pantalla para el formulario. Puede usar esto para ubicar la ventana de WPF (arriba, izquierda) según la pantalla en la que intenta ubicarlo.
[1] También puede utilizar Win32 MonitorFromRect et al, si no desea cargar los archivos dll WinForms. Sin embargo, como ya tienes la API de winforms, no pagarás ningún golpe de memoria/perf.
Aquí está la manera más simple (utiliza WindowStartupLocation.CenterOwner).
MyDialogWindow dialogWindow = new MyDialogWindow();
dialogWindow.Owner = this;
dialogWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
dialogWindow.ShowDialog();
No hay necesidad de interoperabilidad o la creación de coordenadas de la ventana :)
Otra forma de hacerlo es:
WindowInteropHelper helper = new WindowInteropHelper(this);
this.StartupLocation = System.Windows.WindowStartupLocation.Manual;
this.Left = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Left;
this.Top = System.Windows.Forms.Screen.FromHandle(helper.Handle).Bounds.Top;
este = Su ventana de WPF ...
- 1. Process.Start y monitores duales
- 2. Posicionar una ventana con AppleScript usando monitores duales
- 3. ¿Cómo configuro IntelliJ en monitores duales?
- 4. Visual Studio y monitores duales/múltiples: ¿cómo puedo optimizar el uso de mis monitores?
- 5. mostrando texto seleccionable WPF
- 6. C# Winforms: mostrando eficientemente muchos controles
- 7. Incrustar gráfico de WinForms en la ventana WPF
- 8. Ventana emergente en winforms
- 9. WinForms Interop, arrastrar y soltar desde WinForms -> WPF
- 10. ¿Qué es WPF y cómo se compara con WinForms?
- 11. Comparación de rendimiento de Winforms y WPF
- 12. Eventos WPF en Winforms
- 13. arrastrar y soltar en winforms o wpf
- 14. Controles WPF en WinForms
- 15. hacer una ventana emergente WPF no vinculada a la pantalla
- 16. Cómo agregar una ventana de WPF a una aplicación de WinForms
- 17. Visor VNC con monitores múltiples
- 18. ¿Diferencia entre winforms, WPF y metro?
- 19. Tener una ventana wpf dentro de otra ventana wpf
- 20. Mostrando una barra de progreso en una ventana emergente
- 21. COM Interfaces duales
- 22. ¿Minimiza una ventana en WPF?
- 23. ¿Es absolutamente seguro mostrar una ventana de WPF desde un formulario de WinForms?
- 24. Cómo configurar una ventana de Wpf como el propietario de un formulario de Winforms
- 25. Migración desde Winforms a WPF
- 26. Mostrando elemento actual/seleccionado en ListView en WinForms
- 27. Mostrando piezas de HTML en WPF Formulario
- 28. monitores dobles de pygame y pantalla completa
- 29. WPF: ¿Cómo interactuar con la ventana inactiva?
- 30. Ejemplo de una aplicación winforms implementada como una aplicación wpf?