文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

WPF双滑块控件如何使用和强制捕获鼠标事件焦点

2023-07-02 14:52

关注

这篇文章主要介绍了WPF双滑块控件如何使用和强制捕获鼠标事件焦点的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇WPF双滑块控件如何使用和强制捕获鼠标事件焦点文章都会有所收获,下面我们一起来看看吧。

效果

WPF双滑块控件如何使用和强制捕获鼠标事件焦点

代码部分

需求比较简单,只定义了4个依赖属性,范围的最大值和最小值,取值的最大值和最小值.

接下来就是计算滑块和高亮矩形的位置,计算时注意减去椭圆Ellipse控件(圆)的半径,使圆心对准值,而不是左侧对准值.

鼠标移动的时候,计算当前位置对应的值,去改变依赖属性的值:

private void ell_MouseMove(object sender, MouseEventArgs e)        {            if (e.LeftButton == MouseButtonState.Pressed)            {                double percentage = e.GetPosition(rect).X / rect.ActualWidth;                double value = (Maximum - Minimum) * percentage + Minimum;                if (_ellFromPressed)                {                    MinValue = (int)value;                }                if (_ellToPressed)                {                    MaxValue = (int)value;                }            }        }

依赖属性的值变化,引起滑块的位置变化和高亮滑块宽度和位置的变化:

//最小值变化        private void MinValuePropertyChanged()        {            if (MinValue < Minimum)            {                MinValue = Minimum;                return;            }            if (MinValue > MaxValue)            {                MaxValue = MinValue;            }            //滑块位置变化            _offsetFrom = (MinValue - Minimum) * rect.ActualWidth / (Maximum - Minimum) - 8;            Canvas.SetLeft(ellFrom, _offsetFrom);            //高亮矩形长度和位置的变化            if (_offsetTo != -1)            {                double diff = _offsetTo - _offsetFrom;                if (diff >= 0)                {                    rectHighLight.Width = diff;                    Canvas.SetLeft(rectHighLight, _offsetFrom);                }            }        }        //最大值变化        private void MaxValuePropertyChanged()        {            if (MaxValue > Maximum)            {                MaxValue = Maximum;                return;            }            if (MaxValue < MinValue)            {                MinValue = MaxValue;            }            //滑块位置变化            _offsetTo = (MaxValue - Minimum) * rect.ActualWidth / (Maximum - Minimum) - 8;            Canvas.SetLeft(ellTo, _offsetTo);            //高亮矩形长度和位置的变化            if (_offsetFrom != -1)            {                double diff = _offsetTo - _offsetFrom;                if (diff >= 0)                {                    rectHighLight.Width = diff;                    Canvas.SetLeft(rectHighLight, _offsetFrom);                }            }        }

取值的TextBox没有封装在用户控件里,是单独的两个TextBox跟依赖属性双向绑定的.注意绑定的时候触发方式最好不要用PropertyChanged,没有防抖效果,不然体验不是很好.回车触发就可以了.

前台双向绑定:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">            <local:DoubleThumbSlider x:Name="dts" Width="500" Minimum="100" Maximum="200"></local:DoubleThumbSlider>            <TextBox Name="tMin" Width="48" Text="{Binding ElementName=dts,Path=MinValue,UpdateSourceTrigger=Explicit,Mode=TwoWay}" PreviewKeyUp="tbox_PreviewKeyUp"></TextBox>            <TextBlock Margin="5,0" Text="-"></TextBlock>            <TextBox Name="tMax" Width="48" Text="{Binding ElementName=dts,Path=MaxValue,UpdateSourceTrigger=Explicit,Mode=TwoWay}" PreviewKeyUp="tbox_PreviewKeyUp"></TextBox>        </StackPanel>

后台回车触发:

private void tbox_PreviewKeyUp(object sender, KeyEventArgs e)        {            if (e.Key == Key.Enter)            {                TextBox tbox = (TextBox)sender;                var binding = tbox.GetBindingExpression(TextBox.TextProperty);                binding.UpdateSource();            }        }

关于“WPF双滑块控件如何使用和强制捕获鼠标事件焦点”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“WPF双滑块控件如何使用和强制捕获鼠标事件焦点”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯