2009-11-19 13 views

risposta

24

Utilizzare le proprietà Placement e PlacementTarget per posizionarlo rispetto a qualsiasi pannello si trovi nella radice della finestra. Quindi, se ho un Grid, StackPanel, ecc, che contiene tutte le altre "cose" nella finestra chiamata MainPanel, mi fare qualcosa di simile:

<Popup 
    PlacementTarget="{Binding ElementName=MainPanel}" 
    Placement="Center" 
> 
+2

E se si utilizza una serie di controlli utente nidificati ???? La domanda – landoncz

+3

riguardava il centro dello schermo, non il centro del pannello o della finestra. –

+2

Questo non risponde alla domanda. Questo posizionerà l'angolo in alto a sinistra del popup in mezzo allo schermo, non centrerà il popup – Brandon

2

Innanzitutto, è possibile utilizzare le proprietà statiche FullPrimaryScreenHeight, FullPrimaryScreenWidth della classe System.Windows.SystemParameters per ottenere l'altezza e la larghezza dello schermo. Quindi, puoi impostare le proprietà Top e Left del controllo popup usando la larghezza e l'altezza prima di mostrarle.

Qualcosa come.

double primScreenHeight = System.Windows.SystemParameters.FullPrimaryScreenHeight; 
double primScreenWidth = System.Windows.SystemParameters.FullPrimaryScreenWidth; 
_yourControl.Top = (primScreenHeight - _yourControl.Height)/2; 
_yourControl.Left = (primScreenWidth - _yourControl.Width)/2; 
2

Usa griglia come contenitore e di allineamento funziona bene per voi:

<Popup IsOpen="True"> 
    <Grid Name="canvasMain"> 
    <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center"> 
     ... 
    </StackPanel> 
    </Grid> 
</Popup> 
+0

così semplice ma funziona perfettamente – BastanteCaro

+0

Ho provato questo e non funziona. Questo sembra centrare il contenuto del popup, non il popup stesso. –

2

Nessuna di queste risposte ha funzionato per me in parte perché non ho la dimensione del Popup. Ho finito per fare questo nel codice dietro come segue:

var popup = new Popup 
{ 
    Child = new YourUIControlHere(), 
    Placement = PlacementMode.Center, 
    PlacementRectangle = new Rect(new Size(
     SystemParameters.FullPrimaryScreenWidth, 
     SystemParameters.FullPrimaryScreenHeight)) 
}; 

Questo potrebbe essere facilmente esteso a XAML aggiungendo un'associazione per le dimensioni dello schermo.

Un miglioramento evidente consiste nell'utilizzare la schermata corrente per il supporto multi-monitor. Ottenere le dimensioni della finestra corrente è comunque molto più utile.

+0

Questa era la soluzione giusta per me! –

Problemi correlati