有人知道为什么下面的代码在我的窗体应用程序中不执行OnMeasure()吗?我基本上是在尝试强制AbsoluteLayout具有相同的高度/宽度,以显示为Square:
public class AbsoluteSquareLayout : AbsoluteLayout
{
protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint)
{
var size = Math.Min(widthConstraint, heightConstraint);
return base.OnMeasure(size, size);
}
}
字符串
2条答案
按热度按时间envsm3lx1#
覆盖
OnMeasure
调用中的大小约束并不能保证最终大小-因为父布局的最终Layout
传递将覆盖此值。XF的文章在这里详细讨论了这一点。为了能够实现正方形布局-您必须更新父布局以考虑这些约束,并确保它在布局过程中传递。
例如,您可以扩展
AbsoluteLayout
来动态计算子级的大小约束。默认情况下,此自定义布局将所有子项视为正方形。为了覆盖特定子级的该行为-您可以将附加属性SquareLayout.IsSquare
设置为false
。字符串
示例用法:
型
yquaqz182#
这里有一个解决方案,它涉及一个
Frame
和一个AbsoluteLayout
作为子节点。Frame
将确保AbsoluteLayout
居中。字符串
然后,在后面的代码中,
AbsoluteLayout
的尺寸是从Frame
的尺寸导出的:型