private double DetermineY() {
switch (_child.VerticalAlignment) {
case VerticalAlignment.Top:
if (_verticalAdornerPlacement == AdornerPlacement.Outside) {
return -_child.DesiredSize.Height + _offsetY;
}
return _offsetY;
case VerticalAlignment.Bottom:
if (_verticalAdornerPlacement == AdornerPlacement.Outside) {
var adornedHeight = AdornedElement.ActualHeight;
return adornedHeight + _offsetY;
} else {
var adornerHeight = _child.DesiredSize.Height;
var adornedHeight = AdornedElement.ActualHeight;
var x = adornedHeight - adornerHeight;
return x + _offsetY;
}
case VerticalAlignment.Center: {
var adornerHeight = _child.DesiredSize.Height;
var adornedHeight = AdornedElement.ActualHeight;
var x = adornedHeight / 2 - adornerHeight / 2;
return x + _offsetY;
}
case VerticalAlignment.Stretch:
return 0d;
default:
return 0d;
}
}