2011-09-06 129 views
5

我正在使用WPF Popup控件。我希望它出现在我的应用程序窗口中,并锚定在窗口的右下角。弹出窗口的实际高度和宽度将根据正在显示的消息而变化。如何使WPF弹出窗口出现在应用程序的右下角?

如果很重要,弹出窗口的内容是一个边框,包装一个StackPanel,包含多个TextBlocks。

谢谢你的帮助。

回答

0

这是非常棘手的,并没有简单的答案。 关于你的问题,你的状态:

弹出窗口的实际宽度和高度将取决于正在显示 消息改变。

你应该不用担心,这是WPF Popup控件的默认行为。

的步骤,以确保你想要的位置是:

  1. 将PlacementTarget应用程序窗口
  2. 弹出窗口将使用相对的而不是绝对的放置,因为起始位置总是左上角。但确切位置也与应用程序的边缘有关,这意味着您必须使用自定义位置。

有关使用弹出的自定义配置的详细信息,请参阅:

How to: Specify a Custom Popup Position

2

我只是做了这样的事情,这真的不是那么靠谱,但它确实需要您的弹出自定义布局。当声明弹出窗口时,只需将PlacementMode属性设置为Custom,然后将CustomPopupPlacementCallback属性设置为您要使用的方法。

this.trayPopup.CustomPopupPlacementCallback = GetPopupPlacement; 

private static CustomPopupPlacement[] GetPopupPlacement(Size popupSize, Size targetSize, Point offset) 
{ 
    var point = SystemParameters.WorkArea.BottomRight; 
    point.Y = point.Y - popupSize.Height; 
    return new[] { new CustomPopupPlacement(point, PopupPrimaryAxis.Horizontal) }; 
} 
+0

这anchores在显示器的右下角这不一定是你的窗口的右下角弹出。 – sebingel

4

使用PlacementTarget,布局=左,水平/ VerticalOffset

<Popup IsOpen="{Binding ElementName=togglebutton, Path=IsChecked, Mode=TwoWay}" 
     PlacementTarget="{Binding ElementName=togglebutton}" 
     Placement="Left" 
     HorizontalOffset="{Binding ActualWidth, ElementName=togglebutton}" 
     VerticalOffset="{Binding ActualHeight, ElementName=togglebutton}"> 
相关问题