如何以编程方式制作与控件关联的 UWP 弹出窗口?

How do I make a UWP Popup associated with a control programatically?

我正在编写的一个行为需要将弹出窗口与控件相关联 - 以便弹出窗口的位置始终相对于该控件。

在 UWP 中,弹出窗口没有放置 属性 可以玩。然后我如何将它与控件相关联? (我知道我可以手动计算位置,但是当您意识到调整 window 的大小不一定会影响控件时,这很快就会变得非常复杂,因此很难知道何时更新位置)

我不能使用浮出控件,因为我需要一个不能被光消除的弹出窗口。

How do I make a UWP Popup associated with a control programatically?

如果你的意思是在后面关联两个控件代码,我认为 ExpressionAnimation 就是你想要的。

可以根据您定义的 Expression 另一个控件计算 Popup 控件视觉对象的属性。仅举个简单的例子,下面的代码片段使 Popup 始终具有 Offset.X50 基于另一个视觉对象的 Offset.

private void btnmain_Click(object sender, RoutedEventArgs e)
{
    _visualA.Offset = new System.Numerics.Vector3(400, 350, 350);
}

private void btntest_Click(object sender, RoutedEventArgs e)
{
    _visualA = ElementCompositionPreview.GetElementVisual(btnmain);
    _visualB = ElementCompositionPreview.GetElementVisual(pop); 
    compositor = _visualB.Compositor; 
    var expression = compositor.CreateExpressionAnimation("visualA.Offset.X + 50");
    expression.SetReferenceParameter("visualA", _visualA);
    _visualB.StartAnimation("Offset.X", expression);
}

详细计算请根据您的scenarios.More详情自行计算,详情请参考WindowsUIDevLabs