У меня есть рекламодатель, определяемый следующим образом:
private class ErrorAdorner : Adorner
{
private readonly Border _errorBorder;
public ErrorAdorner(UIElement adornedElement)
: base(adornedElement)
{
_errorBorder = new Border();
_errorBorder.BorderThickness = new Thickness(2);
_errorBorder.BorderBrush = Brushes.Red;
Image img = new Image();
img.HorizontalAlignment = HorizontalAlignment.Right;
img.VerticalAlignment = VerticalAlignment.Center;
img.Stretch = Stretch.None;
Binding imgBinding = new Binding
{
Source = adornedElement,
Path = new PropertyPath(IconProperty)
};
img.SetBinding(Image.SourceProperty, imgBinding);
Binding ttBinding = new Binding
{
Source = adornedElement,
Path = new PropertyPath(ErrorMessageProperty)
};
img.SetBinding(ToolTipProperty, ttBinding);
_errorBorder.Child = img;
}
protected override Size MeasureOverride(Size constraint)
{
AdornedElement.Measure(constraint);
return AdornedElement.RenderSize;
}
protected override Size ArrangeOverride(Size finalSize)
{
_errorBorder.Arrange(new Rect(finalSize));
return finalSize;
}
protected override Visual GetVisualChild(int index)
{
if (index == 0)
return _errorBorder;
throw new ArgumentOutOfRangeException("index");
}
protected override int VisualChildrenCount
{
get
{
return 1;
}
}
}
ErrorMessage
и Icon
являются прикрепленными свойствами, объявленными в классе включения (ErrorProvider
).Оформитель добавляется к элементу, когда для свойства ErrorMessage
установлено ненулевое значение.
Моя проблема заключается в том, что при правильной отрисовке обоймы ToolTip
на изображении не отображаетсякогда я наведу на него мышь.Я знаю, что это не является обязательной проблемой: когда я проверяю элементы управления с помощью Snoop, я вижу, что свойство ToolTip
имеет ожидаемое значение.Я подозреваю, что проблема связана с тестированием попаданий, потому что я не могу получить любое событие, связанное с мышью, в adorner ... Свойство IsHitTestVisible
установлено в true, поэтому я не понимаю, почему яне получать события.
Есть идеи?