C#/ WPF:将弹出控件放在屏幕中心?

时间:2009-11-19 09:50:30

标签: c# wpf popup

有谁知道如何在屏幕中心放置弹出控件?

谢谢!

5 个答案:

答案 0 :(得分:27)

使用Placement和PlacementTarget属性将其相对于窗口根部的任何面板进行定位。因此,如果我有一个GridStackPanel等,其中包含名为MainPanel的窗口中的所有其他“内容”,我会执行以下操作:

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

答案 1 :(得分:3)

首先,您可以使用FullPrimaryScreenHeight类的静态属性FullPrimaryScreenWidthSystem.Windows.SystemParameters来获取屏幕的高度和宽度。然后,您可以在显示弹出控件之前使用宽度和高度设置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 :(得分:2)

使用网格作为容器,对齐将适合您:

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

答案 3 :(得分:2)

这些答案中没有一个对我有用,部分原因是因为我不具备Popup的大小。我最后在代码中执行此操作,如下所示:

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

通过为屏幕尺寸添加绑定,可以很容易地将其扩展到XAML。

显而易见的增强功能是使用当前屏幕进行多显示器支持。然而,获得当前窗口尺寸的工作要多得多。

答案 4 :(得分:0)

您可以使用Placement =“ Center”,并使用RelativeSource查找祖先窗口,并将“ PlacementTarget”属性设置为如下属性:

         <Popup
            Placement="Center"
            PlacementTarget="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
            PopupAnimation="Slide">
               <ContentControl Content="{Binding Yourcontent}"/>
         </Popup>

并避免愚蠢的评论:我知道这将弹出窗口置于父窗口的中间(不一定位于屏幕中间[如果父窗口不在屏幕中央,那实际上不是常规情况))但这在大多数情况下应该是合法的。