我只是創建我自己的AboutBox,我打電話給它使用Window.ShowDialog()WPF - 設置對話窗口相對於主窗口的位置?
我如何獲得它相對於主窗口,即從頂部和居中20px的位置。
謝謝。
我只是創建我自己的AboutBox,我打電話給它使用Window.ShowDialog()WPF - 設置對話窗口相對於主窗口的位置?
我如何獲得它相對於主窗口,即從頂部和居中20px的位置。
謝謝。
您可以簡單地使用Window.Left和Window.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。
我會去手工的方式,而不是在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(可能是老闆,如果你喜歡..) ,也可以是窗口本身(左上角點)..
祝你好運
偉大的解決方案! – VibeeshanRC 2016-06-27 10:18:48
謝謝gehho。 – empo 2010-03-15 15:17:35
這將工作DataGridCell(在DataGrid wpf4內))嗎?顯然它不是。 – neebz 2011-02-23 20:34:20
@nEEbz:你什麼意思?你想移動一個'DataGridCell'相對於主窗口?我不明白與原始問題的關係。請詳細說明。 – gehho 2011-03-03 13:02:24