2012-01-30 6 views
2

주 디스플레이의 오른쪽 하단에서 시작하도록 창을 표시하려고합니다 (다중 모니터 시스템에서 확실히 사용됨). 지금까지, 나는 그것을 작동시키지 만 창문은 처음에는 화면 중앙의 어딘가에서 초 동안 깜박 인 다음 올바른 위치로 이동합니다. 여기에 내가있어 무엇 : 나는 이동이 완료되면 다시 표시 한 후 창을 숨기고 같은 명백한 물건을 시도했습니다WPF 창 위치

public MyWindow() 
    { 
     InitializeComponent(); 

     Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => 
     { 
      var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; 
      var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; 
      var corner = transform.Transform(new Point(workingArea.Right, workingArea.Bottom)); 

      this.Left = corner.X - this.ActualWidth; 
      this.Top = corner.Y - this.ActualHeight; 
     })); 
    } 

하지만, 그 중 하나가 그것을 그때 결코 쇼로 작동하지 않는 것 전혀 창문.

나는 그 꽤 작은 문제를 안다. 그러나 그 기묘하게 아주 성가신와 나는 그것을 분류하기를 좋아할 것이다!

+0

안녕하세요, 나는 이것이 당신의 마음 이전에있을 수 있습니다 알고 있지만이 도움이 될 수 있기를 바랍니다. 위에 게시 된 코드를 사용하여이 작업을 이미 완료했다고 가정 했으므로 창을 접을 때 기본 표시 여부를 설정 한 다음 코드를 실행 한 후에 표시하도록 설정하십시오. –

+0

내가 그랬을 때 웬일인지, 창문은 나타나지 않았다. 내가 Visibility = Visibility.Visible을 잘못된 장소에 있었기 때문에 있었을 지 모르지만 어느 쪽이든, 그것은 해킹 된 느낌이 들었습니다. –

+0

그래, 어쨌든 내 더러운 생각없이 문제를 해결해 주신 축하해. :) lolz –

답변

2

집합 Window.Loaded 이벤트 핸들러에서 창 위치 :

public MainWindow() 
{ 
    InitializeComponent(); 

    Loaded += (o, e) => 
     { 
      var workingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea; 
      var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; 
      var corner = transform.Transform(new Point(workingArea.Right, workingArea.Bottom)); 

      this.Left = corner.X - this.ActualWidth; 
      this.Top = corner.Y - this.ActualHeight; 
     }; 
} 
+0

나는 그것을 시도했다 .... 어떤 경우에는, 그것은 작동한다. 감사! –