2010-03-15 214 views

回答

34

您可以簡單地使用Window.LeftWindow.Top屬性。從您的主窗口讀取它們,並在調用ShowDialog()方法之前將值(加上20像素或其他)分配給AboutBox

AboutBox dialog = new AboutBox(); 
dialog.Top = mainWindow.Top + 20; 

有它的中心,你也可以簡單地使用WindowStartupLocation屬性。如果你希望它是水平居中,而不是垂直方向設置這WindowStartupLocation.CenterOwner

AboutBox dialog = new AboutBox(); 
dialog.Owner = Application.Current.MainWindow; // We must also set the owner for this to work. 
dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner; 

(即固定的垂直位置),你必須做的是,在事件處理程序的AboutBox的加載後,因爲您需要根據AboutBox的寬度計算水平位置,並且只有在加載後才知道。

protected override void OnInitialized(...) 
{ 
    this.Left = this.Owner.Left + (this.Owner.Width - this.ActualWidth)/2; 
    this.Top = this.Owner.Top + 20; 
} 

gehho。

+0

謝謝gehho。 – empo 2010-03-15 15:17:35

+0

這將工作DataGridCell(在DataGrid wpf4內))嗎?顯然它不是。 – neebz 2011-02-23 20:34:20

+0

@nEEbz:你什麼意思?你想移動一個'DataGridCell'相對於主窗口?我不明白與原始問題的關係。請詳細說明。 – gehho 2011-03-03 13:02:24

2

我會去手工的方式,而不是在WPF數進行計算的我..

System.Windows.Point positionFromScreen = this.ABC.PointToScreen(new System.Windows.Point(0, 0)); 
PresentationSource source = PresentationSource.FromVisual(this); 
System.Windows.Point targetPoints = source.CompositionTarget.TransformFromDevice.Transform(positionFromScreen); 

AboutBox.Top = targetPoints.Y - this.ABC.ActualHeight + 15; 
AboutBox.Left = targetPoints.X - 55; 

哪裏ABC是父窗口內的一些的UIElement(可能是老闆,如果你喜歡..) ,也可以是窗口本身(左上角點)..

祝你好運

+1

偉大的解決方案! – VibeeshanRC 2016-06-27 10:18:48