的IsDragging
财产我假设你正在尝试使用的Avalon控件从这里:Avalon Controls
我加向控制模板中的拇指发送工具提示并将其称为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;
}
该提示移动工具提示不是我想到的,我从另一个帖子找到它。
我会把它作为练习给读者实施正确的工具提示。
您可以设置工具提示的样式,这样可以实现灵活的显示。不要忘了给工具提示一些东西作为数据上下文,这样它就不会是空白的。
如果这不起作用,也许你可以重载`Thumb`模板来包含一个`Popup`,它的IsOpen绑定到`Thumb`的`IsDragging`。 – 2009-11-19 09:12:30