Winrt - 根据出现的位置调整弹出窗口

时间:2015-07-29 18:01:11

标签: c# xaml windows-runtime windows-store-apps flyout

我在Windows商店项目中有一个GridView,其中包含一些大的正方形,在我有一个用户图像列表的内部,当我点击这些图像时,右边会出现一个弹出按钮,显示一些信息像这样。

enter image description here

问题是我的网格视图延伸到屏幕的边缘以及更远,当我得到这种情况时,我按下屏幕边缘附近的红色边框的用户,并在左边显示弹出窗口。

enter image description here

我的弹出窗口位置设置为右,并且我猜测,因为我按下的元素靠近边缘,它遵循后退顺序,根据this是右>左>>顶部>底部。

我想知道的是如何检测到这种情况发生,所以我可以调整我的弹出位置,或者另一种可行的选择:)

2 个答案:

答案 0 :(得分:1)

在Flyout和FlyoutBase上搜索属性和依赖属性之后,我还没有找到一种方法来简单地获取Flyout的实际位置(这很不幸,因为我觉得这很重要,正如我们在你看到的那样案件)。也许你可以通过实现一个方法来尝试提出here的内容,该方法将Flyout的所需大小与可用空间进行比较。

答案 1 :(得分:0)

您可以订阅FlyOut.Opened事件,并比较弹出窗口的绝对坐标和您在其中显示的元素。以下是顶部/底部弹出位置的示例(也可以轻松扩展以检查左/右):

    private void FlyOut_Opened(object sender, object e)
    {
        GeneralTransform flyOutTransform = 
            flyOut.Content.TransformToVisual(Window.Current.Content);
        Point flyOutPosition = 
            flyOut.TransformPoint(new Point(0, 0));

        GeneralTransform showAtElementTransform = 
            showAtElementTransform.TransformToVisual(Window.Current.Content);
        Point showAtElementPosition = 
            showAtElementPosition.TransformPoint(new Point(0, 0));

        if(flyOutPosition.Y < showAtElementPosition.Y)
        {
            // top
        }
        else
        {
            // bottom
        }
    }