我正在尝试进行范围控制,它基本上是一个带有额外拇指的滑块控件。我找到的唯一代码就是这里。
http://www.codeplex.com/AvalonControlsLib
对于我的生活,在移动时我无法在每个拇指上方显示工具提示(带有当前值)。它将显示一个简短的鼠标悬停工具提示,但在移动拇指时它会消失。有没有人知道这个特定的控件,或者你如何将第二个拇指添加到滑块控件并以相同的方式使用它?除了指向上面的链接之外,我在几个论坛上找到了这个基本问题但没有答案。当然,人们总是在没有展示或解释如何实现它的情况下提到它是多么容易。提前谢谢。
鲍勃
答案 0 :(得分:3)
我假设您正在尝试使用此处的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;
}
移动工具提示的提示不是我想到的,我是从某个地方的另一个帖子中得到的。
我会把它作为练习留给读者来实现正确的工具提示。
您可以设置工具提示的样式,以便灵活显示。不要忘记将工具提示作为数据上下文提供,以使其不会为空白。
答案 1 :(得分:0)
您可以将IsOpen
的{{1}}属性绑定到ToolTip
IsDragging
属性