2009-11-19 11 views

Respuesta

24

utilizar las propiedades de colocación y PlacementTarget para posicionarlo con relación a lo que sea del panel está en la raíz de la ventana. Así que si tengo una Grid, StackPanel, etc., que contiene todas las otras "cosas" en la ventana llamada MainPanel, que hacer algo como:

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

Y si usa una serie de controles de usuario anidados ???? – landoncz

+3

pregunta era para el centro de la pantalla, no el centro del panel o la ventana. –

+2

Esto no responde la pregunta. Esto colocará la esquina superior izquierda de la ventana emergente en el medio de la pantalla, no centrará la ventana emergente – Brandon

2

En primer lugar, puede utilizar las propiedades estáticas FullPrimaryScreenHeight, FullPrimaryScreenWidth de la clase System.Windows.SystemParameters para obtener la altura y el ancho de la pantalla. Luego, puede establecer las propiedades Top y Left de su control emergente usando el ancho y la altura antes de mostrarlo.

Algo así como.

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

Uso de cuadrícula como contenedor y alineación funciona bien para usted:

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

tan simple pero funciona perfectamente – BastanteCaro

+0

Intenté esto y no funciona. Parece que centra los contenidos de la ventana emergente, no la ventana emergente en sí. –

2

Ninguna de estas respuestas trabajado para mí, en parte, porque no tengo el tamaño de la ventana emergente. Terminé haciendo esto en código detrás de la siguiente manera:

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

Esto podría ampliarse fácilmente a XAML agregando un enlace para el tamaño de la pantalla.

Una mejora obvia es utilizar la pantalla actual para compatibilidad con monitores múltiples. Sin embargo, obtener las dimensiones actuales de la ventana es mucho más trabajo.

+0

¡Esta fue la solución correcta para mí! –

Cuestiones relacionadas