如何自定义WPF Popup的位置?

时间:2013-11-19 10:43:14

标签: wpf popup

我有以下代码:

<Popup AllowsTransparency="True"
       PopupAnimation="Fade"
       Placement="MousePoint" VerticalAlignment="Top" HorizontalAlignment="Center"
       IsOpen="{Binding IsPopupOpen}"
       StaysOpen="True" Margin="50">
       <Label Style="{StaticResource PopupInformationLabelStyle}" 
              Content="{Binding EnumPopupText}" Margin="10,10,10,10" />
</Popup>

此弹出窗口正好显示在鼠标位置。实际上我在DataGridTextColumn编辑时显示了这个弹出窗口。因此,当我双击它时,它正好出现在文本框中。所以问题是:

是否可以向MousePosition添加更多像素?粗略地说我需要Placement =“MousePosition”+50。

提前致谢

3 个答案:

答案 0 :(得分:1)

看看另一个类似的答案:how to place a popup on a different screen。许多链接应该适用于您的问题。你可以得到X,Y值并添加你需要的任何东西。

具体来说:PlacementMode EnumerationMousePoint。 来自MousePoint枚举的MSDN

  

Popup控件相对于鼠标光标尖端的位置,以及由Horizo​​ntalOffset和VerticalOffset属性值定义的偏移量。如果水平或垂直屏幕边缘遮挡弹出窗口,则它会在与遮蔽边缘相反的方向打开。如果相反的屏幕边缘也遮挡了弹出窗口,则它会与模糊的屏幕边缘对齐。

答案 1 :(得分:0)

也许这有效..

  Point current = e.GetPosition(this);
  myPopup.HorizontalOffset = current.X + offset;
  myPopup.VerticalOffset = current.Y + offset;
  myPopup.IsOpen = true;

答案 2 :(得分:-3)

将“展示位置”设置为“自定义”,然后在代码中实现以下内容:

Popup1.CustomPopupPlacementCallback = new CustomPopupPlacementCallback(placePopup);