103 votes

WPF: Comment définir une position de dialogue à afficher au centre de l'application?

Comment définir la position de Dialog qui provenait de .ShowDialog(); pour s'afficher au centre des fenêtres principales.

C'est ainsi que j'essaie de définir la position.

 private void Window_Loaded(object sender, RoutedEventArgs e)
{        
    PresentationSource source = PresentationSource.FromVisual(this);
    if (source != null)
    {
        Left = ??
        Top = ??
    }
}
 

304voto

chessweb Points 1231

Dans le XAML appartenant à la boîte de dialogue:

 <Window ... WindowStartupLocation="CenterOwner">
 

et en C # lorsque vous instanciez la boîte de dialogue:

 MyDlg dlg = new MyDlg();
dlg.Owner = this;

if (dlg.ShowDialog() == true)
{
    ...
 

64voto

The_Smallest Points 3132

Je pense qu'il est plus facile d'utiliser le balisage xaml

 <Window WindowStartupLocation="CenterParent">
 

40voto

Fredrik Hedblad Points 42772

Vous pouvez essayer de mettre la main sur la fenêtre principale dans l'événement Loaded comme celui-ci

 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;
}
 

4voto

Jason Points 1

Pour obtenir une boîte de dialogue WPF à positionner au centre d'un formulaire parent Windows Forms, j'ai transmis le formulaire parent à la boîte de dialogue depuis Application.Current n'a pas renvoyé le parent Windows Form (je suppose que cela ne fonctionne que si l'application parent est WPF).

 public partial class DialogView : Window
{
    private readonly System.Windows.Forms.Form _parent;

    public DialogView(System.Windows.Forms.Form parent)
    {
        InitializeComponent();

        _parent = parent;
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        this.Left = _parent.Left + (_parent.Width - this.ActualWidth) / 2;
        this.Top = _parent.Top + (_parent.Height - this.ActualHeight) / 2;
    }
}
 

définissez WindowStartupLocation dans la boîte de dialogue WPF:

 <Window WindowStartupLocation="CenterParent">
 

et la façon dont le Windows Form charge la boîte de dialogue WPF est la suivante:

 DialogView dlg = new DialogView();
dlg.Owner = this;

if (dlg.ShowDialog() == true)
{
    ...
 

2voto

Ugo Robain Points 2313

Vous devez définir une fenêtre parente sur votre fenêtre (propriétaire), puis définir la propriété WindowStartupLocation sur "CenterParent"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X