class Metrics { width: Number left: Number function expand(self: Metrics, event: Event): Unit { self.width = 260 self.left = 68 } } class MeasuredRect: RectBlock { function measure(self: MeasuredRect, mount: Mount, constraints: Constraints): MeasureResult { parent = mount.parent() return MeasureResult(parent.block.metrics.width, 60) } } class OffsetColumn: Column { metrics: Metrics function arrange(self: OffsetColumn, mount: Mount, geometry: Bounds): Arrangement { positions = Column.arrange(self, mount, geometry) positions.children.at(0).x = self.metrics.left return positions } } metrics = Metrics(200, 44) rect = MeasuredRect(80, 20, 0, "#526AC7") button = Button("更新布局") root = OffsetColumn(24, 16, rect, TextBlock("尺寸来自源码 measure,位置来自源码 arrange"), button, metrics) connection = button.on("click", metrics.expand) page = Page() page.render(root)