Доброго времени суток. Вожусь с собственным представлением ToolTip. Вопрос в следующем. Есть ToolTip у которого свойство Placement установлено как Right. Если элемент на котором отображается ToolTip не приближен к правой границе экрана и достаточно места для его отображения то ToolTip отображается правильно, если же не хватает, то ToolTip отображается как будто его свойство Placement установлено как Left. Подскажите как можно узнать с какой именно стороны, в данный момент отображен ToolTip.
Ответ
Возможно нашел решение, но оно не настолько изящно как хотелось бы.
Собственно, есть два варианта решения:
Для ToolTip установить свойство Placement как Custom. Далее к свойству ToolTip CustomPopupPlacementCallback прикрепить делегат:
CustomPopupPlacement[] placeToolTip(Size popupSize,
Size targetSize,
Point offset)
в котором описать варианты отображения ToolTip.
Второй вариант представляет собой определение размещения ToolTip относительно его родителя:
private void ToolTip_IsVisibleChanged(object sender, RoutedEventArgs e)
{
if ((bool)e.NewValue)
{
Point p = (sender as ToolTip).PointToScreen(new Point());
Point t = ((sender as ToolTip).PlacementTarget).PointToScreen(new Point());
if ((sender as ToolTip).Placement == PlacementMode.Right ||
(sender as ToolTip).Placement == PlacementMode.Left)
{
if (p.X > t.X)
(sender as ToolTip).Placement = PlacementMode.Right;
else if (p.X < t.X)
(sender as ToolTip).Placement = PlacementMode.Left;
}
if ((sender as ToolTip).Placement == PlacementMode.Bottom ||
(sender as ToolTip).Placement == PlacementMode.Top)
{
if (p.Y > t.Y)
(sender as ToolTip).Placement = PlacementMode.Top;
else if (p.Y < t.Y)
(sender as ToolTip).Placement = PlacementMode.Bottom;
}
}
}
Оба варианта работают, вот только как упоминалось выше, оба способа является не особо изящными.
Комментариев нет:
Отправить комментарий