我试图弄清楚当弹出窗口实际呈现时,已经使用了CustomPopupPlacement
个数组中传递的数组。是否有任何事件可以检测到这一点?
这个来自2009年的msdn线程似乎正是我的问题,但似乎没有答案。
http://social.msdn.microsoft.com/Forums/da/wpf/thread/4c6d216a-0011-4202-aa7e-2fccef3cc355
标记的答案似乎无效,我的情况与线程中的OP完全一样。
我将弹出4条路径并使用DP在三条路径上切换可见性,以选择正确呈现的箭头路径。
因此,我们通过CustomPopupPlacementCallback
委托提供了4个展示位置选项,是否有办法检测系统在处理屏幕边缘情况和排序后最终选择的4个位置中的哪个位置。
答案 0 :(得分:2)
查找Popup位置的更好方法。 这个方法需要一个Child元素,但考虑到Popup元素附带的Grid,这没有问题。
UIElement container = VisualTreeHelper.GetParent(this) as UIElement;
Point relativeLocation = this.Child.TranslatePoint(new Point(0, 0), container); //It HAS(!!!) to be this.Child
if (relativeLocation.Y < 0) //or use X for left and right
{
Console.WriteLine("TOP PLACEMENT!");
}
else
{
Console.WriteLine("BOTTOM PLACEMENT!");
}
答案 1 :(得分:1)
我有一点hacky解决方案。 将自定义点保存为派生的TooTip类中的字段,并覆盖OnOpened方法。
protected override void OnOpened(RoutedEventArgs e)
{
base.OnOpened(e);
var p = this.TranslatePoint(new Point(0, 0), this.PlacementTarget);
var diff1 = this.first - p;
var diff2 = this.second - p;
if (Math.Abs(Math.Min(diff1.Length, diff2.Length) - diff1.Length) < 0.01)
{
// First Point
}
else
{
// Second Point
}
}
欢迎更好的解决方案