有谁知道如何在屏幕中心放置弹出控件?
谢谢!
答案 0 :(得分:27)
使用Placement和PlacementTarget属性将其相对于窗口根部的任何面板进行定位。因此,如果我有一个Grid
,StackPanel
等,其中包含名为MainPanel
的窗口中的所有其他“内容”,我会执行以下操作:
<Popup
PlacementTarget="{Binding ElementName=MainPanel}"
Placement="Center"
>
答案 1 :(得分:3)
首先,您可以使用FullPrimaryScreenHeight
类的静态属性FullPrimaryScreenWidth
,System.Windows.SystemParameters
来获取屏幕的高度和宽度。然后,您可以在显示弹出控件之前使用宽度和高度设置Top
和Left
属性。
类似的东西。
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>
并避免愚蠢的评论:我知道这将弹出窗口置于父窗口的中间(不一定位于屏幕中间[如果父窗口不在屏幕中央,那实际上不是常规情况))但这在大多数情况下应该是合法的。