Как заставить Xamarin.Forms изменить размер моего пользовательского элемента управления на Android
Мой пользовательский элемент управления иногда может изменить его размер. В этом случае я звоню RequestLayout
а также Invalidate
, Затем в OnMeasure
Я звоню SetMeasuredDimension
с новой высотой. Но здесь я сталкиваюсь с двумя проблемами:
OnMeasure
называется сMeasureSpecMode.Exact
,- Даже если я игнорирую
MeasureSpecMode
и позвонитьSetMeasuredDimension
с новыми значениями размер элемента управления остается прежним.
Итак, мой вопрос: есть ли способ сообщить движку форм Forms обновить размер моих элементов управления?
РЕДАКТИРОВАТЬ: Можно заставить Forms обновить макет, скрыв и затем показывая элемент управления, но я ищу менее хакерский способ исправить это.
1 ответ
Если мы действительно говорим о формах, а не о xamarin.android, вы можете проверить, как это работает, здесь: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/custom
Итак, в основном внутри вашего элемента управления Forms после того, как вы рассчитали желаемый размер, вызовите
InvalidateMeasure();
Переопределить
OnMeasure
и передайте желаемый размер, все остальное Forms сделает:
//fields used to store the desired size
private double _widthRequest = -1;
private double _heightRequest = -1;
protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint)
{
if (_widthRequest > 0 && _heightRequest > 0)
{
var wish = new Size(_widthRequest, _heightRequest);
_widthRequest = -1;
_heightRequest = -1;
return new SizeRequest(wish);
}
return base.OnMeasure(widthConstraint, heightConstraint);
}