如何在运行时在xamarin.forms中的相对布局中更改视图的位置或大小

时间:2019-03-05 10:50:37

标签: c# xamarin xamarin.forms constraints relativelayout

我所做的是我通过设置所有约束将标签添加到了相对布局。

下面是我的代码。

relativeLayout.Children.Add(textLabel, Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
    {
        return sibling.Width * 0.55;
    }), Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
    {
        return sibling.Y;
    }), Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
    {
        return sibling.Width * .45;
    }), Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
    {
        return sibling.Height;
    }));

它运行完美。

现在,我想动态更改该label(textLabel)X约束和宽度约束。例如,从上面的代码中,X约束为sibling.Width * 0.55,宽度为sibling.Width * .45,然后需要将X更改为sibling.Width * 0.55 + 10,宽度为sibling.Width * .45 - 50。该怎么做?

我的猜测是,可以通过删除相对布局的标签并将其再次添加到具有新约束的相对布局中来完成。但我认为对此会有更好的解决方案。

1 个答案:

答案 0 :(得分:0)

正如@ LeoZhu-MSFT的评论一样,它非常适合我。这是我解决问题的方法

对于我的问题,

  

现在我要更改标签(textLabel)X约束和宽度   动态约束。例如,从上面的代码X Constraint   是sibling.Width * 0.55,而width是sibling.Width * .45,则需要   更改为X作为同级。宽度* 0.55 + 10,宽度为同级。宽度*   .45-50.怎么做?

更改X约束

 RelativeLayout.SetXConstraint(textLabel, Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
 {
    return sibling.Width * 0.55 + 10;
 }));

更改宽度约束

 RelativeLayout.SetWidthConstraint(textLabel, Constraint.RelativeToView(innerBorderBox, (parent, sibling) =>
 {
    return sibling.Width * .45 - 50;
 }));

有关

的更多详细信息

RelativeLayout.SetWidthConstraint => https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.relativelayout.setwidthconstraint?view=xamarin-forms RelativeLayout.SetXConstraint => https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.relativelayout.setxconstraint?view=xamarin-forms