2009-11-19 30 views

回答

24

使用Placement和PlacementTarget屬性來定位它相對於窗口根目錄的任何面板。所以,如果我有一個GridStackPanel等包含在所謂MainPanel窗口中的所有其他的「東西」,我這樣做:

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

如果你使用一系列嵌套的用戶控件? – landoncz 2014-01-16 19:01:18

+3

問題是屏幕的中心,而不是面板或窗口的中心。 – 2016-04-30 02:49:18

+2

這並不回答問題。這將彈出的左上角放在屏幕中間,它不會居中彈出 – Brandon 2016-05-27 15:23:10

2

首先,您可以使用System.Windows.SystemParameters類的靜態屬性FullPrimaryScreenHeight,FullPrimaryScreenWidth來獲取屏幕的高度和寬度。然後,您可以在顯示Popup控件時使用寬度和高度來設置TopLeft屬性。

有點像。

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

使用柵格作爲容器和對齊將正常工作對您:

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

這麼簡單,但完美的作品 – BastanteCaro 2011-06-17 14:27:47

+0

我試過這個,它不起作用。這看起來像是中心彈出框的內容,而不是彈出框本身。 – 2016-07-16 21:29:41

2

這些答案都不適用於我,部分原因是我沒有Popup的大小。我最後在代碼背後做了如下:

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

這可以很容易地擴展到XAML通過添加一個屏幕大小的綁定。

一個明顯的增強是使用當前的屏幕支持多顯示器。但是,獲取當前的窗口尺寸是相當多的工作。

+0

這對我來說是正確的解決方案! – 2017-02-23 11:27:45

相關問題