如何在不破坏相对关系的情况下在相对面板中任意定位元素?

时间:2018-07-20 01:32:19

标签: uwp uwp-xaml

我在特定的X,Y坐标处有一个红色的矩形,例如。 (510,280)。我希望将蓝色矩形对接在其左侧。所以我试试这个:

<RelativePanel>
    <Rectangle x:Name="RedShape"  Fill="Red"  Width="400" Height="300">
        <Rectangle.RenderTransform>
              <TranslateTransform X="510" Y="280" />
        </Rectangle.RenderTransform>
    </Rectangle>
    <Rectangle x:Name="BlueShape" Fill="Blue" Width="200" Height="100" RelativePanel.LeftOf="RedShape" />
</RelativePanel>

但是RelativePanel无法识别RedShape的位置。 UI中Redshape位于(510,280),但是BlueShape的位置好像RedShape仍位于(0,0)。

我尝试使用可视层重新定位RedShape,而不是RenderTransform。

var visual = ElementCompositionPreview.GetElementVisual(RedShape);
visual.Offset = new System.Numerics.Vector3(510f, 280f, 0);

相同的问题,红色到达了应该的位置,但是蓝色仍然认为它位于(0,0)。如果我使用RelativePanel约束定位RedShape,那么一切都会按预期进行。但这限制了我将其定位到面板的中心或边缘。

1 个答案:

答案 0 :(得分:1)

在计算布局之后应用了变换,这就是为什么第一个控件的位置(根据布局)仍处于(0,0)的原因。请参阅主题Transforms and layout

很遗憾,RelativePanel不支持任意定位的内容,而Canvas支持任意定位的内容,但不支持相对关系。您可能需要针对情景使用多种面板。