2010-04-13 10 views
5

Restauro las coordenadas de la ventana al iniciar la aplicación. En good-old-Windows-Forms usé la colección System.Windows.Forms.Screen. ¿Hay algo similar en el mundo de WPF?Asegurando que la ventana de WPF está dentro de los límites de la pantalla

Me di cuenta PrimaryScreen*, VirtualScreen* parámetros en System.Windows.SystemParameters. Sin embargo, me dejaron colgando, ya que parece imposible detectar si Window está dentro de los límites en los casos en que los monitores no son del mismo tamaño.

Respuesta

4

System.Windows.Forms.Screen funciona perfectamente bien dentro de WPF, así que creo que los diseñadores de WPF no vieron ninguna ventaja en reemplazarlo con una versión específica de WPF.

Tendrás que hacer una transformación de coordenadas, por supuesto. Aquí está una clase fácil para hacer la conversión: el uso

public class ScreenBoundsConverter 
{ 
    private Matrix _transform; 

    public ScreenBoundsConverter(Visual visual) 
    { 
    _transform = 
     PresentationSource.FromVisual(visual).CompositionTarget.TransformFromDevice; 
    } 

    public Rect ConvertBounds(Rectangle bounds) 
    { 
    var result = new Rect(bounds.X, bounds.Y, bounds.Width, bounds.Height); 
    result.Transform(_transform); 
    return result; 
    } 
} 

Ejemplo:

var converter = new ScreenBoundsConverter { Visual = this }; 

foreach(var screen in System.Windows.Forms.Screen.AllScreens) 
{ 
    Rect bounds = converter.ConvertBounds(screen.Bounds); 
    ... 
} 
Cuestiones relacionadas