2012-01-30 11 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; 
     })); 
    } 

私は移動が完了したら、再びそれを示す、ウィンドウを隠すような明白なものを試してみたが、それはどちらか、それだけで、その後は決してショーとして動作していないよう:ここで私が持っているものですまったく窓。

私はかなり小さい問題を知っていますが、その奇妙なことにはかなり迷惑で、私はそれを並べ替えることが大好きです! Window.Loadedイベントハンドラでウィンドウの位置を設定し

+0

こんにちは、私はこれは、以前のあなたの心にあるかもしれない知っているが、これは助けることができる願っています。上記のコードを使用して既にこれを達成していると言いましたが、ウィンドウのデフォルトの表示を折りたたんで設定し、コードの実行後に表示するようにしてみてください。 –

+0

私がそれをしたとき何らかの理由で、窓が現れなかった。それは私がVisibility = Visibility.Visibleを間違った場所に持っていたからかもしれませんが、いずれにせよ、それはハッキーに感じました:) –

+0

ええ、それは少しトリシのように感じました:)とにかく私の汚れたアイデアなしで問題を解決するためのおめでとう:) lolz –

答えて

2

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

私はそれを試してみました....どんな場合でも、それは動作します。ありがとう! –

関連する問題