加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 仅限WPF Slider Draggable

发布时间:2020-12-15 20:58:46 所属栏目:百科 来源:网络整理
导读:我有一个奇怪的要求,只能让 WPF应用程序中的滑块可拖动,这意味着单击滑块轨道不应移动滑块,它只应在用户单击并拖动滑块时移动.有没有办法在WPF中实现这一目标?我看到一篇帖子暗示你从Slider派生出一个自定义控件,但是只有4个虚拟方法,而且似乎没有帮助. 这
我有一个奇怪的要求,只能让 WPF应用程序中的滑块可拖动,这意味着单击滑块轨道不应移动滑块,它只应在用户单击并拖动滑块时移动.有没有办法在WPF中实现这一目标?我看到一篇帖子暗示你从Slider派生出一个自定义控件,但是只有4个虚拟方法,而且似乎没有帮助.

这是我现在的滑块定义.

<Slider Name="radialSlider" 
        Width="150"  
        VerticalAlignment="Center" 
        TickFrequency=".005" 
        Minimum="-.25" 
        Maximum=".25" 
        IsSnapToTickEnabled="True" 
        ValueChanged="radialSlider_ValueChanged" 
        Thumb.DragCompleted="radialSlider_DragCompleted"  
        Grid.Column="1">
</Slider>

解决方法

通过拦截径向滑块上的鼠标按下事件并检查鼠标是否在拇指滑块上,我能够得到我认为的预期行为.你忘了提到你正在使用 the Mahapps UI library.我使用了一个名为 Snoop的程序来检查页面中的可视元素,以找到MetroThumb控件的名称.只有在加载了radialSlider之后才能找到MetroThumb元素,因此需要在radialSlider的Loaded事件触发后调用搜索方法.

MetroThumb mt;
loadPage(){
    radialSlider.Loaded += (s,e) => {
        mt = radialSlider.FindChild<MetroThumb>("HorizontalThumb");
    };
    radialSlider.PreviewMouseDown += md;
}

private void md(object sender,RoutedEventArgs e) {
    if (!mt.IsMouSEOver) {
        e.Handled = true;
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读