Я предполагаю, что вы пытаетесь использовать элементы управления Avalon отсюда: Элементы управления Avalon
Я добавил всплывающую подсказку в шаблон элемента управления и назвал ее PART_LeftToolTip
<ControlTemplate TargetType="{x:Type Controls:RangeSlider}">
<StackPanel Orientation="Horizontal" Name="PART_RangeSliderContainer">
<RepeatButton Name="PART_LeftEdge"/>
<Thumb Name="PART_LeftThumb" Cursor="SizeWE">
<Thumb.ToolTip>
<ToolTip Name="PART_LeftToolTip" />
</Thumb.ToolTip>
</Thumb>
<Thumb Name="PART_MiddleThumb" Cursor="ScrollWE" MinWidth="1"/>
<Thumb Name="PART_RightThumb" Cursor="SizeWE">
<Thumb.ToolTip>
<ToolTip Name="PART_RightToolTip" />
</Thumb.ToolTip>
</Thumb>
<RepeatButton Name="PART_RightEdge"/>
</StackPanel>
</ControlTemplate>
Я добавил их как части шаблона в элемент управления RangeSlider
TemplatePart(Name = "PART_LeftToolTip", Type = typeof(ToolTip)),
TemplatePart(Name = "PART_RightToolTip", Type = typeof(ToolTip))]
public sealed class RangeSlider : Control
В методе OnApplyTemplate я сделал следующее
_leftPreviewToolTip = EnforceInstance<ToolTip>("PART_LeftToolTip");
_rightPreviewToolTip = EnforceInstance<ToolTip>("PART_RightToolTip");
Внутри метода InitializeVisualElements я добавил следующее
private void InitializeVisualElementsContainer()
{
// ** same as before ** //
_leftPreviewToolTip.PlacementTarget = _leftThumb;
_rightPreviewToolTip.PlacementTarget = _rightThumb;
}
Теперь для забавных частей, в основном вы хотите отобразить эту подсказку, когда большие пальцы перемещаются. Для всплывающей подсказки слева вы хотите, чтобы она отображалась при перемещении большого пальца левой руки или при перемещении центрального пальца. Я создал метод ShowLeftTooltip и вызвал его из LeftThumbDragDelta и CenterThumbDragDelta соответственно.
private void ShowLeftToolTip()
{
_leftPreviewToolTip.IsOpen = AutoToolTip;
// This is a little trick to cause the ToolTip to update its position next to the Thumb
_leftPreviewToolTip.HorizontalOffset = _leftPreviewToolTip.HorizontalOffset == 0.0 ? 0.001 : 0.0;
}
Этот совет по перемещению всплывающей подсказки - не то, о чем я думал, я получил его из другого поста.
Я оставлю читателю в качестве упражнения правильную подсказку.
Вы можете стилизовать всплывающую подсказку, чтобы обеспечить гибкое отображение. Не забудьте указать всплывающую подсказку в качестве контекста данных, чтобы она не была пустой.