2010-04-13 2 views
5

응용 프로그램 시작시 Window의 좌표를 복원합니다. 오래된 Windows 형식에서는 System.Windows.Forms.Screen 컬렉션을 사용했습니다. WPF 세계에서 비슷한 것이 있습니까?WPF 창이 화면 안에 있는지 확인

PrimaryScreen*, VirtualScreen*System.Windows.SystemParameters입니다. 그러나 모니터가 동일한 크기가 아닌 경우 Window가 경계 안에 있는지 여부를 감지하는 것이 불가능 해 보일 수 있으므로 매달려있었습니다.

답변

4

System.Windows.Forms.Screen은 WPF 내에서 완벽하게 작동하므로 WPF 디자이너는 WPF 디자이너가 WPF 전용 버전으로 바꾸는 데 별다른 이점이 없다고 생각합니다.

물론 좌표 변환을 수행해야합니다.

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; 
    } 
} 

사용 예제 :

var converter = new ScreenBoundsConverter { Visual = this }; 

foreach(var screen in System.Windows.Forms.Screen.AllScreens) 
{ 
    Rect bounds = converter.ConvertBounds(screen.Bounds); 
    ... 
} 
다음은 변환을 수행 할 수있는 쉬운 클래스입니다
관련 문제