Не, я не в конструкторе пробовал.
FrameworkElement source = (FrameworkElement) message.Source.UIElement;
Popup popup = source.FindName<Popup>("popupErrors", true);
ItemsControl list = popup.FindName<ItemsControl>("errorsList", true);
list.ItemsSource = _validationResults;
var sourceOffset = source.TransformToVisual(Application.Current.MainWindow).Transform(new Point(0, 0));
var popupOffset = popup.TransformToVisual(Application.Current.MainWindow).Transform(new Point(0, 0));
popup.IsOpen = true;
popup.HorizontalOffset = sourceOffset.X - popupOffset.X - popup.ActualWidth;
popup.Child.MouseLeave += delegate { popup.IsOpen = false; };