private void CalculateBorder()
{
if (ChildNodes.Count == 0) return;
if (Border == null) return;
if (HitTestBorder == null) return;
var minTop = double.MaxValue;
var maxTop = double.MinValue;
var minLeft = double.MaxValue;
var maxLeft = double.MinValue;
foreach (var node in ChildNodes)
{
if (node.Left < minLeft) minLeft = node.Left;
if (node.Top < minTop) minTop = node.Top;
if (node.Left + node.ActualWidth > maxLeft) maxLeft = node.Left + node.ActualWidth;
if (node.Top + node.ActualHeight > maxTop) maxTop = node.Top + node.ActualHeight;
}
double offset = 30;
minLeft -= offset;
minTop -= offset;
maxLeft += offset;
maxTop += offset;
Border.Width = maxLeft - minLeft;
Border.Height = maxTop - minTop;
Canvas.SetLeft(Border, minLeft);
Canvas.SetTop(Border, minTop);
HitTestBorder.Width = maxLeft - minLeft;
//HitTestBorder.Height = maxTop - minTop + 30;
Canvas.SetLeft(HitTestBorder, minLeft);
Canvas.SetTop(HitTestBorder, minTop - 30);
OnPropertyChanged("BorderSize");
}
}