当触发特定用户输入时,我有一个弹出窗口出现在光标附近。
根据the docs,Flyout.Placement
属性仅是首选项,并不一定反映弹出窗口的位置。
我希望框架调用GetFlyoutPlacement
来确定实际展示位置。我想知道实际位置是什么,这样我就可以添加一个指向光标位置的小箭头,如下所示:
我唯一的选择是自己拨打GetFlyoutPlacement
(在Flyout.Opening
事件中触发),还是有更方便的方法来执行此操作?
答案 0 :(得分:0)
我对GetFlyoutPlacement
和GetFlyoutPlacementTargetInfo
的调用导致了Error HRESULT E_FAIL has been returned from a call to a COM component.
,这并没有让我留下太多信息,所以我最终实现了我想象的那些背后的逻辑功能:
public static FlyoutPlacementMode GetActualFlyoutPlacement(
Rect placementTarget,
Size flyoutSize,
FlyoutPlacementMode preferredPlacement )
{
Rect ViewArea = Window.Current.Bounds;
ViewArea.X = 0; // may have non-zero offset for multi-monitor setups
ViewArea.Y = 0; // but we are only interested in offset relative to app view area
switch (preferredPlacement)
{
case FlyoutPlacementMode.Right:
if (desiredSize.Width < ViewArea.Width - placementTarget.Right) return FlyoutPlacementMode.Right;
if (desiredSize.Width < placementTarget.Left) return FlyoutPlacementMode.Left;
if (desiredSize.Height < placementTarget.Top) return FlyoutPlacementMode.Top;
return FlyoutPlacementMode.Bottom;
case FlyoutPlacementMode.Left:
...
}
}
答案 1 :(得分:0)
查看我建议的方法here。我相信它更好,因为它不是猜测内部放置算法,而只是比较弹出窗口和目标元素的绝对坐标。