2009-06-15 84 views
3

我想要做一个范围控件,它基本上是一个带额外拇指的滑块控件。我发现的唯一代码就是在这里。添加第二个拇指到WPF中的滑块控件

http://www.codeplex.com/AvalonControlsLib

对于我的生活,我不能得到一个提示,显示了每个拇指(当前值)以上,同时被移动了。它会显示一个简短的鼠标悬停工具提示,但在拇指移动时会消失。有没有人知道这个特定控件的任何内容,或者你如何将第二个拇指添加到滑块控件并以相同的方式使用它?我在几个论坛上发现了这个基本问题,除了指出上述链接外,没有任何答案。当然,人们总是提到它是多么容易,没有展示或解释你将如何去做。提前致谢。

鲍勃

回答

3

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; 
} 

该提示移动工具提示不是我想到的,我从另一个帖子找到它。

我会把它作为练习给读者实施正确的工具提示。

您可以设置工具提示的样式,这样可以实现灵活的显示。不要忘了给工具提示一些东西作为数据上下文,这样它就不会是空白的。

0

您可以在ToolTipIsOpen属性绑定到的Thumb

+0

如果这不起作用,也许你可以重载`Thumb`模板来包含一个`Popup`,它的IsOpen绑定到`Thumb`的`IsDragging`。 – 2009-11-19 09:12:30