2010-03-15 16 views

risposta

34

È possibile utilizzare semplicemente le proprietà Window.Left e Window.Top. Leggile dalla finestra principale e assegna i valori (più 20 px o altro) a AboutBox prima del chiamando il metodo ShowDialog().

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

di averlo centrato, si può anche semplicemente utilizzare la proprietà WindowStartupLocation. Impostare questo 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; 

Se si vuole che sia centrato orizzontalmente, ma non verticalmente (cioè fisso posizione verticale), si dovrà farlo in un EventHandler dopo l'AboutBox è stato caricato perché è necessario calcola la posizione orizzontale in base alla larghezza di AboutBox e questo è noto solo dopo che è stato caricato.

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

gehho.

+0

Grazie gehho. – empo

+0

funziona anche per DataGridCell (all'interno di DataGrid wpf4))? apparentemente no. – neebz

+0

@nEEbz: cosa intendi? Vuoi spostare un 'DataGridCell' relativo alla finestra principale ?? Non capisco la relazione con la domanda originale. Si prega di elaborare. – gehho

2

vorrei andare il modo manuale, invece di contare su WPF per fare il calcolo per me ..

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; 

Dove ABC è una certa UIElement all'interno della finestra padre (potrebbe essere proprietario, se volete ..) , e potrebbe anche essere la finestra stessa (punto in alto a sinistra) ..

Buona fortuna

+1

Ottima soluzione !!! – VibeeshanRC

Problemi correlati