2012-01-30 146 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

您好,我知道這可能是在你的心中早,但希望能幫助。你說你已經通過使用上面提到的代碼實現了這一點,爲什麼不嘗試設置窗口的默認可見性摺疊,然後在執行代碼後將其設置爲可見。 – 2012-01-30 14:08:56

+0

由於某種原因,當我這樣做時,窗口從未出現。這可能是因爲我有可見性= Visibility.Visible在錯誤的地方,但無論如何,它感覺hacky :) – 2012-01-30 14:39:56

+0

是啊感覺就像一個小三輪車:)無論如何祝賀解決問題,沒有我骯髒的想法:) lolz – 2012-01-30 14:41:21

回答

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

以爲我曾試過....無論如何,它的工作原理。謝謝! – 2012-01-30 14:31:32