November 3, 2014 1 Comment
During the measure phase, the MeasureOverride method is called on an element, indicating the size available to the control. If a Margin has been set on the control, the available size passed in to MeasureOverride will have already been adjusted for that margin.
Below, we include two instances of MyElement in a Grid, setting a margin of 15 on the second element.
<Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <loc:MyElement/> <loc:MyElement Grid.Column="1" Margin="15"/> </Grid>
At run-time, we see that the second element is smaller.
If we instrument MyElement to report the value of the Size parameter that is passed to it, we see that MeasureOverride gets a smaller size passed in for the second instance. The Size has been adjusted for a uniform margin of 15, subtracting 30 from both the width and the height. (We see the same values passed in to ArrangeOverride).