拖动时使WPF滑块的工具提示保持在屏幕上

拖动时使WPF滑块的工具提示保持在屏幕上,wpf,xaml,slider,wpf-style,Wpf,Xaml,Slider,Wpf Style,我正在使用滑块控件设置应用程序的缩放级别,我希望将当前的缩放级别显示为实时显示给最终用户。 所以我决定在滑块顶部显示一个工具提示,以便用户可以看到缩放级别的值 但问题是,当用户拖动滑块的位置时,工具提示消失,我无法再次看到工具提示。我必须改变鼠标的位置,我必须把鼠标放在滑块上,看看缩放级别是什么 我使用的xaml是 <Slider VerticalAlignment="Center"

我正在使用滑块控件设置应用程序的缩放级别,我希望将当前的缩放级别显示为实时显示给最终用户。 所以我决定在滑块顶部显示一个工具提示,以便用户可以看到缩放级别的值

但问题是,当用户拖动滑块的位置时,工具提示消失,我无法再次看到工具提示。我必须改变鼠标的位置,我必须把鼠标放在滑块上,看看缩放级别是什么

我使用的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”,但似乎没有效果。 在拖动滑块拇指的位置时,如何确保滑块工具提示显示在滑块顶部?在这种情况下,请尝试使用:


没有“代码隐藏”的解决方案

自定义弹出控件的实现:

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 AutoToolTipPlacement="TopLeft"/>


为您的
工具提示尝试
StaysOpen=True
。工具提示显然不是正确的控件。工具提示有一个非常明确定义的操作模式:当您第一次将鼠标移到控件上时,它会出现在控件上,然后消失。要重新显示,您需要将鼠标移开并再次移开。你想要的不是这样的东西,那么为什么不创建自己的弹出窗口或文本块,在你口述时显示/消失?但如何打开它?在DragChange事件中,我是否需要调用代码Popup.Isopen=true;??然后当我将cal代码隐藏弹出窗口???。工具提示会自动处理它最可重复使用的答案。谢谢对我最有帮助的回答!谢谢
<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 AutoToolTipPlacement="TopLeft"/>