[WPF]Slider控件常用方法
WPF的Slider控件继承自RangeBase类型,同继承自RangeBase的控件还有ProgressBar和ScrollBar,这类控件都是在一定数值范围内表示一个值的用途。
首先注意而RangeBase是基于浮点double类型的,不是基于整数int的,WPF中的许多度量单位都是基于浮点的。
对于Slider来说,RangeBase的Minimum(最小值)默认是0,Maximum(最大值)默认是10,Value(当前值)默认是0。
接下来就是RangeBase的剩余两个变量,SmallChange和LargeChange。SmallChange用来当Slider有焦点时,使用键盘的左右箭头来改变值的大小,而LargeChange则是点击Slider条的空白部分造成值的改变大小(和滚动条类似)。
SmallChange默认是0.1,LargeChange默认是1。
注意由于浮点数的表示涉及到精度的问题,某些值的表示无法准确而只能存储成近似值,所以一个空空的默认Slider会有如下问题:
首先XAML,一个默认Slider,下面一个TextBlock绑定Value属性来显示当前值:
<Slider Name="slider"/>
<TextBlock Text="{Binding ElementName=slider,Path=Value}"/>
运行程序,如果你从左往右按住右箭头(这样是SmallChange:0.1),结果会是:
而如果把值先设置成最右的10,然后按住左箭头从右往左滑动,结果会是:
问题看到了吧,Slider不仅把内部丑陋的冗长小数显示出来,而且还由于浮点数精度问题显示的值还不一样,上面两个图本来显示的都是8.3这个数。
由于Slider是基于RangeBase的,后者又是基于浮点数的,所以滑动值时作出的改变肯定是按浮点数的方式改变的,改变后的结果不一定是整数,为此我们可以吧Slider分成一段一段的,然后每一个段代表一个整数,让Slider仅在这些段中滑动,这个段就是Slider中所谓的”Tick”。具体每段的间隔可以用TickFrequency来设置,这个TickFrequency默认已经是1的,但是为了让Slider在Tick中移动,还需要设置IsSnapToTickEnabled属性。
这样的话:
<Slider Name="slider" IsSnapToTickEnabled="True"/>
<TextBlock Text="{Binding ElementName=slider,Path=Value}"/>
结果就是无论怎样移动Slider的位置,值都会是整数。
不过Slider的Tick默认是不显示的,TickPlacement默认是None,通过调节TickPlacement,我们可以让Slider的Tick显示出来:
<Slider Name="slider" IsSnapToTickEnabled="True" TickPlacement="Both"/>
结果:可以看到由于TickPlacement设置成了Both,Slider上下出现了两列小点代表Tick。
上面都是按照TickFrequency均匀分布的Tick,Slider还有一个Ticks属性(类型是DoubleCollection)可以完全自定义所有Tick,Ticks被定义后,TickFrequency就没有意义了,如下代码:
<Slider Name="slider" IsSnapToTickEnabled="True" TickPlacement="Both" Ticks="0.5 1.0 1.5 3.0"/>
仔细观察Slider,它的Tick会按照Ticks属性的定义变成这样:
有了上述知识,我们可以把WPF得Slider控件调整地再人性化一些,如下代码:
<StackPanel>
<UniformGrid Columns="3" Rows="1" Margin="1">
<TextBlock Text="{Binding ElementName=slider,Path=Minimum}"
TextAlignment="Left"/>
<TextBlock Text="{Binding ElementName=slider,Path=Value}"
TextAlignment="Center"/>
<TextBlock Text="{Binding ElementName=slider,Path=Maximum}"
TextAlignment="Right"/>
</UniformGrid>
<Slider Name="slider"
IsSnapToTickEnabled="True"
TickPlacement="TopLeft"
/>
</StackPanel>
运行结果:
最后WPF的Slider还支持把一部分范围的选项高亮化(也就是所谓的SelectionRange:选择范围),没有什么实际意义,仅仅是界面上的高亮,不过还是很有意思的。实现需要设置Slider的IsSelectionRangeEnabled为True,接着设置SelectionStart和SelectionEnd来标记具体范围。
如下代码:
<Slider Name="slider" IsSnapToTickEnabled="True" TickPlacement="Both"
IsSelectionRangeEnabled="True"
SelectionStart="2" SelectionEnd="5"/>
<TextBlock Text="{Binding ElementName=slider,Path=Value}"/>
运行结果:
另外Slider控件还有Direction属性可以调节显示方向,IsDirectionReversed属性反转方向,Delay属性控制内部RepeatButton的重复时段还有一些关于提示框的显示设置,这些属性相对使用上比较少见(或者较好理解)这里就不多讲了,读者可以根据需求浏览MSDN。
[WPF]Slider控件常用方法的更多相关文章
- WPF RichTextBox 控件常用方法和属性
以下内容转自 http://blog.csdn.net/yulongguiziyao/article/details/25330551. 1. 取得已被选中的内容: (1)使用 RichTextBox ...
- WPF滑块控件(Slider)的自定义样式
前言 每次开发滑块控件的样式都要花很久去读样式代码,感觉有点记不牢,所以特此备忘. 自定义滑块样式 首先创建项目,添加Slider控件. 然后获取Slider的Window样式,如下图操作. 然后弹出 ...
- 示例:WPF中Slider控件封装的缓冲播放进度条控件
原文:示例:WPF中Slider控件封装的缓冲播放进度条控件 一.目的:模仿播放器播放进度条,支持缓冲任务功能 二.进度: 实现类似播放器中带缓存的播放样式(播放区域.缓冲区域.全部区域等样式) 实现 ...
- WPF常用控件应用demo
WPF常用控件应用demo 一.Demo 1.Demo截图如下: 2.demo实现过程 总体布局:因放大缩小窗体,控件很根据空间是否足够改变布局,故用WrapPanel布局. <ScrollVi ...
- WPF Popup 控件导致被遮挡内容不刷新的原因
WPF Popup 控件导致被遮挡内容不刷新的原因 周银辉 今天在写一个WPF控件时用到了Popup控件,很郁闷的情况是:当popup关闭时,原来被popup挡住的界面部分不刷新,非要手动刷新一下(比 ...
- 创建 WPF 工具箱控件
创建 WPF 工具箱控件 WPF (Windows Presentation Framework) 工具箱控件模板允许您创建 WPF 控件,会自动添加到 工具箱 安装扩展的安装. 本主题演示如何使用模 ...
- 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.7.Slider控件
默认slider的安装启用 为slider自定义风格 修改配置选项 创建一个垂直的slider 设置最大最小值,和默认值 启用多个 手柄 和 范围 slider内置的回调事件 slider的方法 这个 ...
- VC++ 中滑动条(slider控件)使用 [转+补充]
滑动控件slider是Windows中最常用的控件之一.一般而言它是由一个滑动条,一个滑块和可选的刻度组成,用户可以通过移动滑块在相应的控件中显示对应的值.通常,在滑动控件附近一定有标签控件或编辑框控 ...
- wpf打印控件 实现分页打印控件功能
因为 要实现打印 wpf listbox控件 数据特别多 要打印在 几张纸上 找了几天 都没有找到相关的例子 现在 解决了 在这里和大家分享一下 public void print(Fram ...
随机推荐
- Linux 之加密类型,CA,Openssl,Openssh
TCP/IP:安全 A------->B 机密性:明文传输(ftp,http,smtp,telnet),被窃听 完整性:消息被篡改 身份验证:你访问的主机就是你真实要访问的那台,而不是钓鱼网站 ...
- 使用Axis2实现WebService的发布和调用
一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: 可以下载如下三个zip包: axis2-1.7.3-bin.zip(用 ...
- css 隐藏超长的文本!!!
overflow:hidden; text-overflow:ellipsis;white-space: nowrap; 一起使用!
- CRM域用户误删恢复
记录一下: 不小心将CRM用户在域中删除了(CRM中未删除),直接新建一个同样账号的域用户然后尝试在CRM中登录报“invalid user”错误,一番检查发现从2011版本开始CRM中不单记录了用户 ...
- 大毕设-MATLAB-常用知识回顾
要用到FIR滤波器和抽样器下面研究这两个的Matlab实现: Fir滤波器: matlab上fir滤波器的关键字是fir1 在command窗口输入help fir1出现帮助文档: >> ...
- 误差曲线(Matlab)
loglog(dof(:),errorestimate(:),:),errorestimate1(:),);hold on; loglog(dof(:),eigvalue(:)-[);%[13.086 ...
- spark 特殊函数
private var seed: Long = System.nanoTime()//返回最准确的可用系统计时器的当前值,以毫微秒为单位 require(storageLevel != Storag ...
- 计算机病毒实践汇总六:IDA Pro基础
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 1. IDA使用 (1)搜索.下载并执行IDA Pro,对可执行程序lab05-01.dll进行装载,分别以图形 ...
- VBA 小知识
1. 循环 Dim i As Integer 'body Next 'body Wend 2. 键值数据结构 'create dictionary object Set dictMembers = C ...
- 初学c# -- 学习笔记(五) winfrom自定义滚动条
找了些例子,要么庞大.要么搞个安装组件什么的,我要求能用就行了.实在找例子修改麻烦,就做了一个.其实实现挺简单,就是panel或图片什么的跟着鼠标走就行了. 这里panel自己可以加背景图或直接搞个图 ...