#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
));
В зависимости от ваших потребностей, вам может быть проще работать с другим контейнером.