WPF - Установить позицию диалогового окна относительно основного окна? - PullRequest
18 голосов
/ 15 марта 2010

Я просто создаю свой собственный AboutBox и вызываю его с помощью Window.ShowDialog ()

Как мне расположить его относительно главного окна, т.е. на 20 пикселей сверху и по центру.

Спасибо.

Ответы [ 2 ]

39 голосов
/ 15 марта 2010

Вы можете просто использовать свойства Window.Left и Window.Top . Прочитайте их из основного окна и присвойте значения (плюс 20 пикселей или что-то еще) в AboutBox до вызова метода ShowDialog().

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;

Если вы хотите, чтобы он был отцентрирован по горизонтали, а не по вертикали (то есть, с фиксированным вертикальным положением), вам придется делать это в EventHandler после загрузки AboutBox, потому что вам нужно будет вычислить горизонтальное положение в зависимости от ширины AboutBox, и это известно только после его загрузки.

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

gehho.

2 голосов
/ 02 декабря 2015

Я бы пошел ручным путем, вместо того чтобы рассчитывать на 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 в родительском окне (может быть Owner, если хотите ..), а также может быть само окно (верхняя левая точка) ..

Удачи

...