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