2015-01-20 4 views
0

Это может быть дубликат, но я просмотрел его и просмотрел StackOverFlow, чтобы попытаться найти исправление для этой проблемы, и это все равно не сработает. Я пытаюсь центрировать окно (диалоговое окно ввода) в моем главном окне. Он должен быть вертикально центрирован, а ширина нового окна (диалоговое окно) должна быть шириной MainWindow.Центрирование нового окна в mainwindow

Это то, что я пытался до сих пор:

Application curApp = Application.Current; 
Window mainWindows = curApp.MainWindow; 
this.Left = mainWindows.Left; 
this.Top = mainWindows.Top + (mainWindows.ActualHeight - this.ActualHeight)/2; 
this.Width = mainWindows.ActualWidth; 

Вышеприведенный код находится в нагруженном случае окна диалога.

Хотя центры вертикально, он не ставит его в точном центре MainWindow (т.е. Левые свойства не совпадают.)

Пожалуйста, помогите.


Это, как я вызвать диалоговое окно:

var dialog = new MyDialog(); 
dialog.ShowMessage("Capture Amount", "Please enter the 'Capture Amount'"); 
if (dialog.ShowDialog() == true) { 
    DialogResponse = dialog.ResponseAmount.ToString(); 

    CustomTitleMain = "Main Window: " + CurrencyCode.ToString() + " " + DialogResponse.ToString(); 
} 

DialogResponse, CurrencyCode и ResponseAmount является свойством. Первые два являются строками, последние - десятичными.

+3

Вы хотите что-то вроде ** mainWindows .WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; ** –

+0

Не имеет значения, если вы сначала задали свойство 'Width'? –

+0

Нет, нет, его все еще немного. –

ответ

0

Вы можете установить StartupLocation вашего диалога в Init как:

Application curApp = Application.Current; 
Window mainWindows = curApp.MainWindow; 
this.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; 
this.Owner = mainWindows; 
this.Left = mainWindows.Left; 
this.Top = mainWindows.Top + (mainWindows.ActualHeight - this.ActualHeight)/2; 
this.Width = mainWindows.ActualWidth; 

или установить его, когда вы вызываете его:

var dialog = new MyDialog(); 
dialog.Owner = Application.Current.MainWindow; 
dialog.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; 
dialog.ShowMessage("Capture Amount", "Please enter the 'Capture Amount'"); 
if (dialog.ShowDialog() == true) { 
    DialogResponse = dialog.ResponseAmount.ToString(); 

    CustomTitleMain = "Main Window: " + CurrencyCode.ToString() + " " + DialogResponse.ToString(); 
} 

Но имейте в виду, что вам также можно установить все эти параметры через xaml. Что, на мой взгляд, делает его более читаемым.

+0

Это помогло мне дойти до моего ответа, и я расскажу вам об этом в xaml. Спасибо. –

0

Используйте System.Windows.WindowStartupLocation.CenterOwner, а также установите свойство диалогового окна Owner.

Window subWindow = new MyWindow(); 
subWindow.Owner = Application.Current.MainWindow; 
subWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; 
subwindow.ShowDialog(); 
Смежные вопросы