.ShowDialog();
메인 윈도우의 중앙에 표시하기 위해 나온 Dialog의 위치를 설정하는 방법 .
이것이 제가 위치를 설정하는 방법입니다.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
PresentationSource source = PresentationSource.FromVisual(this);
if (source != null)
{
Left = ??
Top = ??
}
}
답변
다음과 같이 Loaded 이벤트에서 MainWindow를 확보하려고 할 수 있습니다.
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Application curApp = Application.Current;
Window mainWindow = curApp.MainWindow;
this.Left = mainWindow.Left + (mainWindow.Width - this.ActualWidth) / 2;
this.Top = mainWindow.Top + (mainWindow.Height - this.ActualHeight) / 2;
}
답변
대화 상자에 속하는 XAML에서 :
<Window ... WindowStartupLocation="CenterOwner">
그리고 C #에서 대화 상자를 인스턴스화 할 때 :
MyDlg dlg = new MyDlg();
dlg.Owner = this;
if (dlg.ShowDialog() == true)
{
...
답변
xaml 마크 업을 사용하는 것이 더 쉽다고 생각합니다.
<Window WindowStartupLocation="CenterOwner">
답변
코드 뒤에 있습니다.
public partial class CenteredWindow:Window
{
public CenteredWindow()
{
InitializeComponent();
WindowStartupLocation = WindowStartupLocation.CenterOwner;
Owner = Application.Current.MainWindow;
}
}
답변
이 질문에 대한 모든 사람의 대답은 대답이 무엇인지에 대한 부분이라고 생각합니다. 이 문제에 대한 가장 쉽고 우아한 접근 방식이라고 생각하는 그것들을 간단히 정리할 것입니다.
창을 배치 할 첫 번째 설정. 여기 주인입니다.
<Window WindowStartupLocation="CenterOwner">
창을 열기 전에 소유자에게 제공해야하며 다른 게시물에서 현재 응용 프로그램의 MainWindow에 대한 정적 getter를 사용하여 MainWindow에 액세스 할 수 있습니다.
Window window = new Window();
window.Owner = Application.Current.MainWindow;
window.Show();
그게 다야.
답변
나는 이것이 최고임을 발견했다
frmSample fs = new frmSample();
fs.Owner = this; // <-----
fs.WindowStartupLocation = WindowStartupLocation.CenterOwner;
var result = fs.ShowDialog();
답변
표시해야하는 창을 거의 제어 할 수없는 경우 다음 스 니펫이 유용 할 수 있습니다.
public void ShowDialog(Window window)
{
Dispatcher.BeginInvoke(
new Func<bool?>(() =>
{
window.Owner = Application.Current.MainWindow;
window.WindowStartupLocation = WindowStartupLocation.CenterOwner;
return window.ShowDialog();
}));
}