我在Windows商店项目中有一个GridView
,其中包含一些大的正方形,在我有一个用户图像列表的内部,当我点击这些图像时,右边会出现一个弹出按钮,显示一些信息像这样。
问题是我的网格视图延伸到屏幕的边缘以及更远,当我得到这种情况时,我按下屏幕边缘附近的红色边框的用户,并在左边显示弹出窗口。
我的弹出窗口位置设置为右,并且我猜测,因为我按下的元素靠近边缘,它遵循后退顺序,根据this是右>左>>顶部>底部。
我想知道的是如何检测到这种情况发生,所以我可以调整我的弹出位置,或者另一种可行的选择:)
答案 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
}
}