private Rect TargetArrangeSize(UIElement element)
{
// 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;
return new Rect(_proxyColumns[col].MinTotal,
_proxyRows[row].MinTotal,
_proxyColumns[col + colSpan].MinTotal + _proxyColumns[col + colSpan].MinSize - _proxyColumns[col].MinTotal,
_proxyRows[row + rowSpan].MinTotal + _proxyRows[row + rowSpan].MinSize - _proxyRows[row].MinTotal);
}