private void MeasureElements(MetaElementStateDict stateDict,
ICollection elements)
{
foreach (UIElement element in elements)
{
// Find the row/col definitions for this element
int col = Math.Max(0, Math.Min(_columns.Count - 1, GetColumn(element)));
int row = Math.Max(0, Math.Min(_rows.Count - 1, GetRow(element)));
// Find the row/col spanning definitions for this element (convert to zero based spanning)
int colSpan = Math.Max(Math.Min(_columns.Count - col, GetColumnSpan(element)), 1) - 1;
int rowSpan = Math.Max(Math.Min(_rows.Count - row, GetRowSpan(element)), 1) - 1;
// Find column width to use for measuring
int index = col;
double measureWidth = 0;
do
{
measureWidth += _proxyColumns[index].MeasureSize;
} while ((measureWidth < double.PositiveInfinity) && (index++ < (col + colSpan)));
// Find row height to use for measuring
index = row;
double measureHeight = 0;
do
{
measureHeight += _proxyRows[index].MeasureSize;
} while ((measureWidth < double.PositiveInfinity) && (index++ < (row + rowSpan)));
stateDict[element].Element.Measure(new Size(measureWidth, measureHeight));
}
}