RelativeLayout не позиционирует вид по центру горизонтали при установке X Factor .5

#xaml #xamarin #xamarin.forms

#xaml #xamarin #xamarin.forms

Вопрос:

Я работаю над RelativeLayout , у меня их три BoxView . boxview3 Я хочу получить после boxview2 использования Type=RelativeToView .

boxview3 XConstraint Я устанавливаю, что .5 все еще boxview3 отображается вверху слева, почему? Как я могу получить boxview3 сразу после boxview2 ?

 <RelativeLayout>
<BoxView x:Name="boxview1" BackgroundColor="#b87333"                 
         RelativeLayout.WidthConstraint="{ConstraintExpression Type=RelativeToParent,
         Property=Width,Factor=.5 }"                
         RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent,
         Property=Height, Factor=1}">
</BoxView>

<BoxView BackgroundColor="Red" x:Name="boxview2"                
         RelativeLayout.HeightConstraint="{ConstraintExpression ElementName=boxview1,
         Type=RelativeToView,Property=Height,Factor=.1}" 
         RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToView,
         ElementName=boxview1,Factor=1,Property=Width}"
         RelativeLayout.WidthConstraint="{ConstraintExpression   
         Type=RelativeToParent,Property=Width, Factor=0.1,Constant=-10}"
         RelativeLayout.YConstraint="{ConstraintExpression Type=RelativeToView,
         ElementName=boxview1,Property=Height,Factor=.4}">
</BoxView>

<BoxView BackgroundColor="Blue" x:Name="boxview3"
        RelativeLayout.XConstraint="{ConstraintExpression Type=RelativeToView,
        ElementName=boxview2, Property=Width,Factor=.5}">
</BoxView>

</RelativeLayout> 
  

Примечание: При отображении, XConstraint как .5 я ожидаю view , в середине экрана оно должно быть горизонтальным.

Вывод скриншота:

введите описание изображения здесь

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

1. Не совсем понятно, в чем ваша проблема. Вы хотите, чтобы ваш синий boxview был здесь? prntscr.com/mu3yln

2. @DenseCrab -Да. Я хочу использовать синюю рамку справа от красной Type=RelativeToView , вот и все. Когда я задал X как .5, я ожидал, что синее поле появится посередине, но этого не было. Спасибо.

Ответ №1:

Короткий ответ заключается в том, что вы не можете указать ограничение X, которое вы ищете в Xaml, вам придется использовать C #. Все элементы в RelativeLayout позиционируются относительно всего RelativeLayout.

В Xaml, который у вас есть прямо сейчас, указано, что ширина boxview2 равна 0,1 * RelativeLayout.Ширина — 10, а координата X boxview3 равна половине этой величины, поэтому она будет расположена на уровне 0,05 * RelativeLayout.ширина — 5 слева вверху, что вы и видите.

Для ограничений RelativeLayout в Xaml вы можете использовать ровно 1 от X или Y верхнего левого края вида или его ширины или высоты. Для достижения желаемого вам нужен верхний правый угол boxview2 (или boxview2.X boxview2.Width). Вам нужно будет создать boxview3 в коде C #, например:

 reelativeLayout.Children.Add (boxview3, Constraint.RelativeToView (boxview2, (parent, view) => {
        return view.X   view.Width;
    }),
    …   // other constraints
    ));
  

В зависимости от ваших потребностей, вам может быть проще работать с другим контейнером.