系列文章链接

基于范围的控件

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事件(当用在文本输入部分不能被转换成合法的时间时触发该事件)。

WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)的更多相关文章

  1. WPF进阶技巧和实战03-控件(3-文本控件及列表控件)

    系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...

  2. WPF进阶技巧和实战06-控件模板

    逻辑树和可视化树 System.Windows.LogicalTreeHelper System.Windows.Media.VisualTreeHelper 逻辑树类(LogicalTreeHelp ...

  3. WPF进阶技巧和实战07--自定义元素01

    完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚 ...

  4. WPF进阶技巧和实战08-依赖属性与绑定02

    将元素绑定在一起 数据绑定最简单的形式是:源对象是WPF元素而且源属性是依赖项属性.依赖项属性内置了更改通知支持,当源对象中改变依赖项属性时,会立即更新目标对象的绑定属性. 元素绑定到元素也是经常使用 ...

  5. WPF进阶技巧和实战02-布局

    窗体 无边框 窗体无边框(最大化及标题位置)WindowStyle="None" 窗体透明 AllowsTransparency="True",必须设置窗体无边 ...

  6. WPF进阶技巧和实战09-事件(2-多点触控)

    多点触控输入 多点触控输入和传统的基于比的输入的区别是多点触控识别手势,用户可以移动多根手指以执行常见的操作,放大,旋转,拖动等. 多点触控的输入层次 WPF允许使用键盘和鼠标的高层次输入(例如单击和 ...

  7. WPF进阶技巧和实战03-控件(1-控件及内容控件)

    所有控件都继承自System.Windows.Controls.Control类,这个类添加一些基本结构: 设置控件内容对齐方式 (HorizontalContentAlignment,Vertica ...

  8. WPF进阶技巧和实战03-控件(5-列表、树、网格03)

    数据视图 数据视图是在后台工作的,用于协调绑定数据的集合.使用数据视图可以添加导航逻辑.实现数据过滤.排序.分组. 当将集合或者DataTable绑定到ItemsControl控件时,会不加通告地在后 ...

  9. WPF进阶技巧和实战03-控件(5-列表、树、网格02)

    数据模板 样式提供了基本的格式化能力,但是不管如何修改ListBoxItem,他都不能够展示功能更强大的元素组合,因为了每个ListBoxItem只支持单个绑定字段(通过DisplayMemberPa ...

随机推荐

  1. Java基础系列(1)- JDK、JRE、JVM

    Java三大版本(Write Once:Run Anywhere) JavaSE:标准版 JavaME:嵌入式开发 JavaEE:E企业级开发 JDK.JRE.JVM JDK是开发工具包 JRE是编译 ...

  2. php 设计模式 --桥接模式

    php抽象类和接口的区别 https://www.cnblogs.com/vinter/p/8716685.html 什么时候适合使用 --- 多个角色配合工作:抽象角色对应具体角色: <?ph ...

  3. AVS 通信模块之AVSConnectionManager

    AVSConnectionManager 类为客户端无缝地管理与AVS的连接 功能简介 失败时连接重试 允许后续重新连接 ping管理 AVS服务器断开时周期重连服务器 允许客户端完全启用或禁用连接管 ...

  4. Centos7下thinkphp5.0环境配置

    首先把yum源修改为阿里的yum源,如果没有安装wget,先安装一个.(如果有请蹦过) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors ...

  5. 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出\(n,k\)求 \[\sum_{i_1=1}^n\sum_{i_2=1}^n.. ...

  6. IdentityServer4系列[6]授权码模式

    授权码模式是一种混合模式,是目前功能最完整.流程最严密的授权模式.它主要分为两大步骤:认证和授权.其流程为: 用户访问客户端,客户端将用户导向Identity Server. 用户填写凭证信息向客户端 ...

  7. Mac里存储空间不足,该怎么删垃圾数据?

    说明:在mac设备运行一段时间后,电脑空间很小了,对于开发者来说,清清Xcode缓存,腾出几十G的空间还是有可能的.在升级Xcode适配新系统.新手机也是得给电脑减减压. 一.Xcode缓存文件(co ...

  8. Java(44)JDK新特性之函数式接口

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201667.html 博客主页:https://www.cnblogs.com/testero ...

  9. 第一次Alpha Scrum Meeting

    本次会议为Alpha阶段第一次Scrum Meeting会议 会议概要 会议时间:2021年4月22日 会议地点:北航Inspiration Space咖啡厅 会议时长:1小时 会议内容简介:本次会议 ...

  10. redis中lua脚本的简单使用

    一.背景 在使用redis的过程中,发现有些时候需要原子性去操作redis命令,而redis的lua脚本正好可以实现这一功能.比如: 扣减库存操作.限流操作等等. redis的pipelining虽然 ...