2014-10-09 89 views
1

我正在使用滑块控件来设置应用程序的缩放级别,并且我想将当前缩放级别显示为最终用户的直播。 所以我决定在滑块顶部显示一个工具提示,以便用户可以看到缩放级别的值。使拖动时WPF滑块的工具提示停留在屏幕上

但问题是,当用户拖动滑块的位置工具提示消失,我不能再看到工具提示。我不得不改变鼠标的位置的dagain我必须把鼠标放在滑块的顶部,看看有什么缩放级别

我使用了XAML是这个

<Slider           
    VerticalAlignment="Center"            
    Minimum="50" Maximum="200" Width="150" Name="ViewZoomlevel" 
    IsMoveToPointEnabled="True" IsSnapToTickEnabled="True" 
    Thumb.DragStarted="ViewZoomlevel_DragStarted" Thumb.DragCompleted="ViewZoomlevel_DragCompleted"           
     > 
    <Slider.ToolTip > 
     <ToolTip StaysOpen="True" ToolTipService.ShowDuration="12000" Content="{Binding RelativeSource={RelativeSource Self}, 
        Path=PlacementTarget.Value}" 
        ContentStringFormat="Zoom: {0:0} %" /> 
    </Slider.ToolTip> 
</Slider> 

我申请ToolTipService.ShowDuration =“12000 “但它似乎没有效果。 同时拖动滑块

+0

尝试'StaysOpen = TRUE'你'ToolTip'。 – 2014-10-09 06:55:43

+0

已经设置了 – 2014-10-09 06:58:02

+1

工具提示显然不是正确的控制方式。工具提示有一个非常明确的操作模式:当您首先将鼠标移到控件上然后消失时,会出现在控件上。要重新出现,您需要将鼠标移开并移回。你想要的东西不是这样的,所以为什么不直接创建自己的弹出窗口或文本块,当你指定时出现/消失? – Mashton 2014-10-09 08:35:59

回答

0

的位置。在这种情况下,滑块工具提示我怎么可以确保在那里出现在滑块的顶部尝试使用Popup

<Grid> 
    <Slider Name="MySlider"          
      VerticalAlignment="Center" 
      Minimum="50" Maximum="200" Width="150" 
      IsMoveToPointEnabled="True" IsSnapToTickEnabled="True" /> 

    <Popup Name="MyPopup" 
      IsOpen="False" 
      StaysOpen="True" 
      PlacementTarget="{Binding ElementName=MySlider}" 
      PlacementRectangle="150,0,0,0"> 
     <Grid Background="AliceBlue"> 
      <TextBlock Text="{Binding ElementName=MySlider, Path=Value}" /> 
     </Grid> 
    </Popup> 
</Grid> 

您还可以在Slider事件添加IsOpen="True"IsOpen="False"

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void MySlider_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e) 
    { 
     MyPopup.IsOpen = true; 
    } 

    private void MySlider_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e) 
    { 
     MyPopup.IsOpen = false; 
    } 
} 
+0

但如何打开它?在DragChange事件上,我需要调用代码Popup.Isopen = true;?然后当我打开cal代码来隐藏弹出窗口时,工具提示会自动处理它 – 2014-10-09 07:17:34

+0

@JMat:请参阅我的编辑。 – 2014-10-09 07:22:56

2

没有不

'后面代码' 溶液

实现自定义弹出控制:

public class PopupEx : Popup 
{ 
    protected override void OnOpened(EventArgs e) 
    { 
     var friend = this.PlacementTarget; 
     friend.QueryCursor += friend_QueryCursor; 

     base.OnOpened(e); 
    } 

    protected override void OnClosed(EventArgs e) 
    { 
     var friend = this.PlacementTarget; 
     friend.QueryCursor -= friend_QueryCursor; 

     base.OnClosed(e); 
    } 

    private void friend_QueryCursor(object sender, System.Windows.Input.QueryCursorEventArgs e) 
    { 
     this.HorizontalOffset += +0.1; 
     this.HorizontalOffset += -0.1; 
    } 
} 

XAML:

<Slider Minimum="0" Maximum="100" VerticalAlignment="Center" HorizontalAlignment="Stretch"> 
     <Slider.Template> 
      <ControlTemplate TargetType="{x:Type Slider}"> 
       <Grid Background="#05000000"> 
        <PopupEx x:Name="InfoPopup" Width="Auto" Height="Auto" PlacementTarget="{Binding ElementName=Thumb}" Placement="Top" StaysOpen="False" IsOpen="False" AllowsTransparency="True"> 
         <Border Padding="2" CornerRadius="3" Background="#555C5C5C"> 
          <TextBlock Foreground="Black" Text="{Binding ElementName=PART_Track, Path=Value, StringFormat=Zoom:{0:0}%}"></TextBlock> 
         </Border> 
        </PopupEx> 
        <Track x:Name="PART_Track"> 
         <Track.Thumb> 
          <Thumb x:Name="Thumb" Width="10" Height="20"> 
          </Thumb> 
         </Track.Thumb> 
        </Track> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger SourceName="Thumb" Property="IsDragging" Value="True"> 
         <Setter Value="True" TargetName="InfoPopup" Property="IsOpen" /> 
        </Trigger> 
        <Trigger SourceName="Thumb" Property="IsDragging" Value="False"> 
         <Setter Value="False" TargetName="InfoPopup" Property="IsOpen" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Slider.Template> 
    </Slider> 

slider with tooltip result

+0

最重要的答案。谢谢! – TravisWhidden 2017-08-15 21:34:24