[wpf] WPF : 응용 프로그램의 중앙에 표시 할 대화 상자 위치를 설정하는 방법은 무엇입니까?

.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();
            }));
    }