2017-02-22 15 views
0

Я знаю, как настроить дочернее окно для отображения в WinForms и WPF. Это можно сделать, настроив родителя/владельца в зависимости от WinForm/WPF.Центрирование дочернего окна WinForms, когда родительский элемент имеет WPF

Но недавно я столкнулся с ситуацией, когда мне нужно установить дочернее окно в центр родителя, где Child из WinForms и parent имеет WPF.

Я попытался с,

newForm window = new newForm; 
window.Owner = this; 

Что бы, очевидно, не будет работать, и

window.StartPosition = FormStartPosition.CenterParent; 

после

newForm window = new newForm; 
window.MdiParent = this; 

Кроме того, не будет работать.

Любые предложения о том, как я могу это достичь?

ответ

0

Я не думаю, что есть встроенный способ сделать то, что вы хотите, но вычисление значения не слишком сложно. Вот простой расчет, который устанавливает центр ребенка равным центру родителя.

var form = new Form(); 
//This calculates the relative center of the parent, 
//then converts the resulting point to screen coordinates. 
var relativeCenterParent = new Point(ActualWidth/2, ActualHeight/2); 
var centerParent = this.PointToScreen(relativeCenterParent); 
//This calculates the relative center of the child form. 
var hCenterChild = form.Width/2; 
var vCenterChild = form.Height/2; 
//Now we create a new System.Drawing.Point for the desired location of the 
//child form, subtracting the childs center, so that we end up with the child's 
//center lining up with the parent's center. 
//(Don't get System.Drawing.Point (Windows Forms) confused with System.Windows.Point (WPF).) 
var childLocation = new System.Drawing.Point(
    (int)centerParent.X - hCenterChild, 
    (int)centerParent.Y - vCenterChild); 
//Set the new location. 
form.Location = childLocation; 

//Set the start position to Manual, otherwise the location will be overwritten 
//by the start position calculation. 
form.StartPosition = FormStartPosition.Manual; 

form.ShowDialog(); 

Примечание: Это не включает в себя хром окна для любого родителя или ребенка, поэтому она может быть немного от центра по вертикали.

+0

Нет другого пути. – Prajwal