如何相对于按钮在Windows应用商店应用中定位弹出控件?

时间:2014-02-27 10:08:35

标签: c# popup windows-store-apps

单击Windows应用商店应用中的按钮后,应在按钮附近显示Popup控件。

使用PopupVerticalOffset属性(= =相对于左上角的坐标)定位HorizontalOffset是没有问题的,但如何获取按钮的位置相对于屏幕正确计算偏移量?

按钮位于页面上的某个位置,并且没有相对于屏幕的固定位置(例如,当放置在滚动视图中时等)。如何获得按钮的坐标?

1 个答案:

答案 0 :(得分:6)

您需要使用这些来电:UIElement.TransformToVisualGeneralTransform.TransformPoint。 不幸的是,自从我这样做以来已经有一段时间了,所以我无法详细说明这些调用究竟是做什么的。

下面的代码显示按钮的左上角位置并在那里打开弹出窗口。您可能希望根据需要调整定位。

private void btnClickMe_Click(object sender, RoutedEventArgs e)
{
    Popup popUp = new Popup();
    // TODO: Add your elements to the popup here...

    // open the popup at the same coordinates as the button
    var point = CalcOffsets((UIElement)sender);
    popUp.HorizontalOffset = point.X;
    popUp.VerticalOffset = point.Y;

    popUp.IsOpen = true;
}

private Point CalcOffsets(UIElement elem)
{
    // I don't recall the exact specifics on why these
    // calls are needed - but this works.
    var transform = elem.TransformToVisual(this);
    Point point = transform.TransformPoint(new Point(0, 0));

    return point;
}