我在特定的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,那么一切都会按预期进行。但这限制了我将其定位到面板的中心或边缘。
答案 0 :(得分:1)
在计算布局之后应用了变换,这就是为什么第一个控件的位置(根据布局)仍处于(0,0)的原因。请参阅主题Transforms and layout。
很遗憾,RelativePanel不支持任意定位的内容,而Canvas支持任意定位的内容,但不支持相对关系。您可能需要针对情景使用多种面板。