Как изменить положение или размер представления в относительном макете во время выполнения в xamarin.forms

#c# #xamarin #xamarin.forms #constraints

#c# #xamarin #xamarin.forms #ограничения

Вопрос:

Что я сделал, так это добавил метку в относительный макет, установив все ограничения.

Ниже приведен мой код для этого.

 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;
    }));
  

и это работает отлично.

Теперь я хочу динамически изменять ограничение X метки (textLabel) и ограничение ширины. Например, из приведенного выше кода ограничение X равно sibling.Width * 0.55 , а ширина — sibling.Width * .45 , затем необходимо изменить на X как sibling.Width * 0.55 10 , а ширина — sibling.Width * .45 - 50 . Как это сделать?

Я предполагаю, что это можно сделать, удалив метку для относительного макета и добавив снова в относительный макет с новым ограничением. Но я думаю, что для этого найдется лучшее решение.

Комментарии:

1. Вы пробовали транспонировать?

2. @BradDixon Что такое транспонирование?

3. извините, перевести, а не транспонировать. learn.microsoft.com/en-us/dotnet/api /…

4. Нет, я постараюсь дать вам знать. Я думаю, что это может сработать.

5. Вы пробовали это: RelativeLayout.SetXConstraint(textLabel,constraintValue) и RelativeLayout.SetWidthConstraint(textLabel,constraintValue)

Ответ №1:

Как прокомментировал @LeoZhu-MSFT, у меня это работает идеально. Вот как я устранил проблему

На мой вопрос,

Теперь я хочу динамически изменять ограничение X метки (textLabel) и ограничение ширины. Например, из приведенного выше кода ограничение X является родственным.Width * 0.55 и 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://learn.microsoft.com/en-us/dotnet/api/xamarin.forms.relativelayout.setwidthconstraint?view=xamarin-forms RelativeLayout.SetXConstraint => https://learn.microsoft.com/en-us/dotnet/api/xamarin.forms.relativelayout.setxconstraint?view=xamarin-forms