Position de la fenêtre de dialogue WPF-Set par rapport à la fenêtre principale?

je crée juste ma propre boîte vocale et je l'appelle en utilisant Window.ShowDialog ()

Comment obtenir la position par rapport à la fenêtre principale, i.e. 20px à partir du haut et centré.

Merci.

18
demandé sur empo 2010-03-15 14:08:33

2 réponses

vous pouvez simplement utiliser la fenêtre .Fenêtre de gauche et .Top propriétés. Lisez - les à partir de votre fenêtre principale et assignez les valeurs (plus 20 px ou n'importe quoi d'autre) à la boîte D'envol avant appelant la méthode ShowDialog() .

AboutBox dialog = new AboutBox();
dialog.Top = mainWindow.Top + 20;

pour l'avoir centré, vous pouvez aussi simplement utiliser la propriété WindowStartupLocation . Réglez cela sur WindowStartupLocation.CenterOwner

AboutBox dialog = new AboutBox();
dialog.Owner = Application.Current.MainWindow; // We must also set the owner for this to work.
dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner;

si vous voulez qu'il soit centré horizontalement, mais pas verticalement (c.-à-d. La position verticale fixe), vous devrez le faire dans un EventHandler après que L'AboutBox a été chargé parce que vous aurez besoin de calculer la position horizontale en fonction de la largeur de L'AboutBox, et ce n'est connu qu'après qu'il a été chargé.

protected override void OnInitialized(...)
{
    this.Left = this.Owner.Left + (this.Owner.Width - this.ActualWidth) / 2;
    this.Top = this.Owner.Top + 20;
}

gehho.

36
répondu gehho 2014-11-07 12:43:23

j'opterais pour la méthode manuelle, au lieu de compter sur WPF pour faire le calcul pour moi..

System.Windows.Point positionFromScreen = this.ABC.PointToScreen(new System.Windows.Point(0, 0));
PresentationSource source = PresentationSource.FromVisual(this);
System.Windows.Point targetPoints = source.CompositionTarget.TransformFromDevice.Transform(positionFromScreen);

AboutBox.Top = targetPoints.Y - this.ABC.ActualHeight + 15;
AboutBox.Left = targetPoints.X - 55;

ABC est quelque chose dans la fenêtre de parent (pourrait être propriétaire si vous voulez..), Et pourrait aussi être la fenêtre elle-même (en haut à gauche)..

bonne chance

2
répondu Li3ro 2015-12-02 09:47:29