WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)
系列文章链接
- WPF进阶技巧和实战01-小技巧
- WPF进阶技巧和实战02-布局
- WPF进阶技巧和实战03-控件(1-控件及内容控件)
- WPF进阶技巧和实战03-控件(2-特殊容器)
- WPF进阶技巧和实战03-控件(3-文本控件及列表控件)
- WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)
- WPF进阶技巧和实战03-控件(5-列表、树、网格01)
- WPF进阶技巧和实战03-控件(5-列表、树、网格02)
- WPF进阶技巧和实战03-控件(5-列表、树、网格03)
- WPF进阶技巧和实战03-控件(5-列表、树、网格04)
- WPF进阶技巧和实战04-资源
- WPF进阶技巧和实战05-样式与行为
- WPF进阶技巧和实战06-控件模板
- WPF进阶技巧和实战07--自定义元素01
- WPF进阶技巧和实战07--自定义元素02
- WPF进阶技巧和实战08-依赖属性与绑定01
- WPF进阶技巧和实战08-依赖属性与绑定02
- WPF进阶技巧和实战08-依赖属性与绑定03
基于范围的控件
WPF提供了3种范围概念的控件,这些控件使用在特定最小值和最大值之间的数值,ScrollBar、ProgressBar、Slider,他们都继承自RangeBase类(该类继承自Control类)。RangeBase类定义的属性:
名称 | 说明 |
---|---|
Value | 控件的当前值,必须在最大值和最小值之间。默认是从0开始。属性值不是整数,是double,可接受小数值。Value属性值发生变化时,可响应ValueChanged事件 |
Maximum | 上限,允许的最大值 |
Minimum | 下限,允许的最小值 |
SmallChange | 最小变化(调整的数量)。小变化的含义与控件相关,对于ScrollBar和Slider控件,这是当使用箭头键时值改变的量,对于ScrollBar控件,还可以使用滚动条两端的箭头按钮 |
LargeChange | 最大变化(调整的数量)。大变化的含义与控件相关,对于ScrollBar和Slider控件,这是当使用PageUp和PageDown键或者单击滑块两侧时值改变的量 |
通常不直接使用ScrollBar控件,更高级的ScrollViewer控件封装了两个ScrollBar控件,Slider和ProgressBar控件更实用,经常被单独使用。
Slider
当数字本身不是特别重要时,可使用该控件设置数值。比如通过滑动条上从一边向另一边拖动滑块设置媒体播放器的音量是非常合理的。滑块的大致位置指示当前相对音量,但是后面的数字对用户没有实际意义。Slider额外的属性:
名称 | 说明 |
---|---|
Orientation | 竖直滑动条和水平滑动条之间切换 |
Delay/Interval | 当单击并按下滑动条的两侧,控制滑动块沿轨迹移动的速度。这两个属性都是毫秒值。Delay是单击后在滑块移动一个单位之前的时间,而Interval是当继续按住鼠标键时滑块再次移动之前的时间 |
TickPlacement | 决定刻度显示的位置,默认是None不显示刻度标记。还有TopLeft和BottomRight两种情况显示 |
TickFrequency | 设置刻度之间的间隔,决定了显示多少刻度。例如,可每隔5个单位放置一个刻度,每隔10个单位放置一个刻度等。 |
Ticks | 如果希望在特定的不规则位置放置刻度,可使用Ticks集合,简单地为每个刻度标记向该集合添加一个数值 |
IsSnapToTickEnabled | 默认false,如果为true时,当移动滑动条时,会自动跳转到合适的位置(最近的刻度) |
IsSelectionRangeEnabled | 如果为true,可使用选择范围使滑动条的一部分显示阴影,使用SelectionStart和SelectionEnd属性设置位置选择范围。选择范围没有固有的意义,但可以因为任何有意义的目的而使用,如:媒体播放器有时使用阴影背景工具条指示媒体文件的下载进度 |
<Slider
Width="400"
VerticalAlignment="Center"
IsSnapToTickEnabled="True"
Maximum="{Binding DataStepMax}"
Minimum="{Binding DataStepMin}"
SmallChange="{Binding DataStepStep}"
TickFrequency="{Binding DataStepStep}"
Value="{Binding Step}" />
ProgressBar
该控件指示长时间运行任务的进度。不能与用户进行交互。由代码传递Value属性值,无法响应鼠标动作或者键盘键入。通常方式是将它作为长时间运行的状态指示器,甚至可能不知道该任务需要执行多长时间,可以通过IsIndeterminate属性设置为true来完成这一工作(这时不再使用Minimum、Maximum和Value属性)
<ProgressBar Height="20" Margin="0,5"
IsIndeterminate="True" Maximum="200"
Style="{StaticResource ProgressBarDanger}" Value="100" />
日期控件
WPF包含两种日期控件:Calender和DatePicker。
Calender控件显示日历,与WIndows操作系统中看到的日历相似,该控件每次显示一个月份,允许从一个月份调到另一个月份,或者调到某个特定的月份(通过单击月份的标题头查看一年中的月份,然后单击月份)
DatePicker控件需要的控件较少。它模仿简单的文本框,该文本框以长日期或者短日期格式保存日期字符串。提供了一个下来箭头,单击时,会弹出完整的日历视图(同Calender)。
两个控件提供属性允许确定显示哪些日期以及哪些如期可供选择(以连续的范围提供这些日期),可供使用的属性:
名称 | 说明 |
---|---|
DisplayDateStart DisplayDateEnd |
设置在日历视图中显示日期范围。从第一个最早的日期DisplayDateStart到最后的日期DisplayDateEnd。不能导航到未包含能够显示的日期的月份。为显示所有日期,可将DisplayDateStart属性设置为DateTime.MinValue,并将DisplayDateEnd设置成DateTime.MaxValue |
BlackoutDates | 保存在日历中将被禁用或者不能选择的日期集合。如果这些日期不在可显示的日期范围内,或者如果已经选择了这些日期中的某个日期,那么将接收到异常。为阻止选择过去的任何日期,可调用BlackoutDates.AddDatesInPass()方法 |
SelectedDate | 作为DateTime对象提供选择的日期(或者在没有日期选中时使用null值)可以通过代码或者单击日历中的日期或者通过键盘输入日期字符串设置该属性。在日历视图中,选择的日期使用具有阴影的方框标识,只有当日期控件具有焦点时才会显示该方框 |
SelectedDates | 作为DateTime对象的集合提供选择的日期。Calender控件支持该属性,并且只有当修改SelectionMode属性允许选择多个日期时,该属性才有用。 |
DisplayDate | 使用DateTime对象确定在日历视图中最初显示的日期。如果该属性是null,将显示SelectedDate属性的值。如果两者都为null,则显示当前日期。 |
FirstDayOfWeek | 确定在日历中每行的开始位置(最左边的位置)显示一星期中的哪一天 |
IsTodayHighlighted | 确定日历视图是否通过突出显示指出当前日期 |
DisplayMode (Calender控件) |
确定日历最初的月份显示模式。如果设置为Month,则显示标准的单一月份视图,如果是Year,则显示当前年份中的月份,一旦单击了某个月份,就显示月份的完整视图 |
SelectionMode (Calender控件) |
确定日期选择类型。默认值是SingleDate,允许选择单个日期。None(完全禁止选择日期),SingleRange(可选择一组连续的日期),MultipleRange(可选择任意日期的组合)。在后两种模式下,可以通过拖动选择多个日期,或者当按下Ctrl键时通过单击选择多个日期,可使用SelectedDates属性获取所有选择的日期集合 |
IsDropDownOpen (DatePicker控件) |
确定是否打开DatePicker控件中的下拉日历视图。可通过代码设置该属性显示和隐藏日历 |
SelectedDateFormat (DatePicker控件) |
确定在此控件文本部分显示选择的日期方式,可选择Short或者Long,实际的显示格式取决于客户计算机的区域设置。长日期通常包含月份和天的名称 |
日期控件提供了不同的事件,最常见的是DatePicker控件的SelectedDateChanged事件或者Calender控件的SelectedDatesChanged事件,该事件添加了对多个日期选择的支持。
Calender控件还添加了DisplayDateChanged事件,DatePicker控件还添加了CalenderOpened和CalenderClosed事件(日历控件打开或者关闭),DateValidationError事件(当用在文本输入部分不能被转换成合法的时间时触发该事件)。