WPF进阶技巧和实战03-控件(1-控件及内容控件)
所有控件都继承自System.Windows.Controls.Control类,这个类添加一些基本结构:
- 设置控件内容对齐方式
(HorizontalContentAlignment,VerticalContentAlignment,Padding)
- 设置Tab键顺序
(TabIndex,IsTabStop)
- 绘制背景,前景,边框
(Background,Foreground,BorderBrush,BorderThickness)
- 支持格式化文本内容的尺寸和字体
(FontFamily,FontSize,FontStretch,FontStyle,FontWeight)
内容控件
内容控件可以包含并显示一个内容。与布局容器不同,内容控件只能包含一个子元素,而布局容器只要愿意可以包含任意多个元素。我们仍可以在内容控件中放置大量内容--就是使用布局容器来封装所有内容(常见的StackPanel,Grid)。常见的场景就是Window作为内容控件,包含了大量内容,这些内容都包裹在Grid中。
Panel提供Children集合来保存嵌套的元素不同,Control类添加了Content属性(只接受单一对象),Content属性支持任何类型的对象(Window除外)

标签Lable
最简单的内容控件。Lable能够为链接的控件设置焦点的快捷键。通过Target属性设置指向需要设置焦点的控件。

按下Alt键之后,Lable标签的内容 B显示了下划线,然后再同时按下Alt+B,焦点就会设置到名称为txtBox1的控件上。
按钮
WPF提供了3种类型的按钮控件:Button,CheckBox,RadioButton,都继承自ButtonBase
ButtonBase定义了Click事件并添加了对命令的支持,允许更高层应用程序任务触发按钮。ButtonBase添加了ClickMode属性,该属性决定何时引发Click事件以响应鼠标动作。默认值是ClickMode.Release,这意味着当单击和释放鼠标键时引发Click事件。

Button控件
Button就是我们一直使用的按压按钮,它有两个可写属性:IsCancel、IsDefault。
- 如果IsCancel设置为true,按钮就成了窗口的取消按钮,在窗口任何位置按下Esc时,就会触发该按钮。
- 如果IsDefault属性设置为true,按钮就成为默认按钮(接受按钮),其行为取决于焦点在窗口中的当前位置。如果焦点位于某个非按钮控件上(TextBox,RadioButton,CheckBox等),默认按钮就会变成蓝色阴影,像是具有焦点。如果按下Enter键,就会触发默认按钮。如果焦点在其他Button上,按下Enter键只会触发当前具有焦点的按钮,而不是默认按钮。


一般在一个窗口中,只会设置一个取消按钮和默认按钮,否则逻辑就会变的混乱。
ToggleButton和RepeatButton控件
- GridViewColumnHeader类,当使用基于网格的ListView控件时,该类表示一列可以单击的标题
- RepeatButton类,只要按钮保持按下状态,该类就不断地触发Click事件。普通的按钮,用户单击一次只会触发一个Click事件。
- ToggleButton类,该类具有两个状态(按下状态和未按下状态)。当单击这类按钮时,它会保持按下状态,直到再次单击该按钮以释放它为止。
这两个控件都不是抽象类,可以直接在用户界面中使用。
CheckBox控件
- 继承自ToggleButton,可以切换开关状态。
- IsChecked属性是可空的boolean类型(bool?)。选中为true,不选中为false,null时比较复杂,表示不确定状态(显示具有阴影的复选框)
- IsThreeState属性决定了复选框是否拥有3种状态(不确定状态是否可用),默认false
- 复选框进入待定状态时会触发3个事件:Checked,UnChecked,Indeterminate。大多数情况下,通过处理继承自ButtonBase的Click事件将这个3个逻辑合并成一个事件处理,无论何时改变按钮的状态都会触发Click事件。
RadioButton
- 同CheckBox特点
- GroupName属性,用于控制对单选按钮进行分组
ToolTip
- 工具提示(当在一些感兴趣的内容上悬停鼠标时,就会弹出那些提示框)是内容控件,可以放置任何可视化元素
- 可以通过改变时间来设置提示的显示和隐藏速度
- ToolTip窗口不能接收焦点,所以不要放置与用户交互的控件(如果需要交互,可以使用Popup控件)
- ToolTip对象的属性
- HasDropShadow:工具提示是否有扩散的黑色阴影,使其和背后的窗口区分开
- Placement:工具提示放置的位置。默认是Mouse(表示工具提示方框的左上角与当前鼠标的位置相关,根据HorizontalOffset和VerticalOffset的值,工具提示的实际位置会偏离起始点),其他枚举值使用绝对屏幕坐标来设置工具提示的位置,或者使用相对元素(PlacementTarget属性指定的元素)设置工具提示的位置
- PlacementTarget:工具提示相对元素位置的元素,Placement不能是Mouse,必须是Left,Right,Top,Buttom、Center(指定相对元素哪个边缘对齐)
- PlacementRectangle:用于偏移的位置,和HorizontalOffset和VerticalOffset相同。Placement必须是Mouse
- CustomPopupPlacementCallback:允许使用动态定位提示工具。Placement设置为Custom,由ToolTip调用来设置位置,回调方法三个参数是popupSize(ToolTip的大小),targetSize(PlacementTarget的大小),offset(根据HorizontalOffset和VerticalOffset创建的点),返回CustomPopupPlacement[]来设置ToolTip的位置
this.toolTip.CustomPopupPlacementCallback =
new CustomPopupPlacementCallback((Size popupSize, Size targetSize, Point offset) =>
{
CustomPopupPlacement placement1 = new CustomPopupPlacement(new Point(-50, 100), PopupPrimaryAxis.Vertical);
CustomPopupPlacement placement2 = new CustomPopupPlacement(new Point(10, 20), PopupPrimaryAxis.Horizontal);
CustomPopupPlacement[] ttplaces = new CustomPopupPlacement[] { placement1, placement2 };
return ttplaces;
});
- StaysOpen:无效
- IsEnabled:是否禁用,IsOpen:通过代码显示或者隐藏工具提示

- 设置ToolTipService属性
ToolTip的一些属性不能自己设置,需要使用附加属性ToolTipService类来设置。可以在控件标签中直接设置,不是添加嵌套的ToolTip元素。
- InitialShowDelay:设置鼠标悬停在元素上时,工具提示显示之前的延迟时间(ms)
- ShowDuration:如果用户不移动鼠标,在工具提示消失之前显示的时间(ms)
- BetweenShowDelay:设置时间间隔,在这个时间间隔内,如果鼠标从一个元素(具有tooltip)移动到另一个元素(具有tooltip),现在的元素上的tooltip立刻显示,而不需要InitialShowDelay这个延迟时间。如果超出了这个时间间隔,这个场景则无效。
- ShowOnDisabled:相关联的元素不可用时,是否显示工具提示,默认false
- ToolTip:设置提示信息内容
- Popup控件
- 也是内容控件,但是内容放在属性Child里,而不是Context。
- 可以和ToolTip一样,使用相同属性设置控件的位置
- 可以使用IsOpen属性设置显示和隐藏Popup控件
区别:
- Popup控件不会自动显示,必须通过IsOpen属性设置。
- 默认下,Popup的StaysOpen是true,并且会一直显示,直到将属性IsOpen设置为false。如果将StayeOpen设置为false,那么鼠标点击其他地方时,Popup控件就会消失
- Popup控件可以获得焦点,可以在内容中放置交互控件(与ToolTip的区别)
- Popup必须设置Background属性,不会从包含他的窗口继承背景设置
- Popup拥有PopupAnination属性,可以控制Popup控件进入视野的方式,默认是None,Fade(弹出窗口的透明度逐渐增加,Scroll(如果空间允许,弹出窗口将从窗口的左上角滑入),Slide(如果空间允许,弹出窗口从上向下滑进其位置)使用这个动画的前提是:AllowsTransparency=true
WPF进阶技巧和实战03-控件(1-控件及内容控件)的更多相关文章
- WPF进阶技巧和实战03-控件(3-文本控件及列表控件)
系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...
- WPF进阶技巧和实战03-控件(4-基于范围的控件及日期控件)
系列文章链接 WPF进阶技巧和实战01-小技巧 WPF进阶技巧和实战02-布局 WPF进阶技巧和实战03-控件(1-控件及内容控件) WPF进阶技巧和实战03-控件(2-特殊容器) WPF进阶技巧和实 ...
- WPF进阶技巧和实战03-控件(5-列表、树、网格02)
数据模板 样式提供了基本的格式化能力,但是不管如何修改ListBoxItem,他都不能够展示功能更强大的元素组合,因为了每个ListBoxItem只支持单个绑定字段(通过DisplayMemberPa ...
- WPF进阶技巧和实战09-事件(2-多点触控)
多点触控输入 多点触控输入和传统的基于比的输入的区别是多点触控识别手势,用户可以移动多根手指以执行常见的操作,放大,旋转,拖动等. 多点触控的输入层次 WPF允许使用键盘和鼠标的高层次输入(例如单击和 ...
- WPF进阶技巧和实战03-控件(5-列表、树、网格03)
数据视图 数据视图是在后台工作的,用于协调绑定数据的集合.使用数据视图可以添加导航逻辑.实现数据过滤.排序.分组. 当将集合或者DataTable绑定到ItemsControl控件时,会不加通告地在后 ...
- WPF进阶技巧和实战06-控件模板
逻辑树和可视化树 System.Windows.LogicalTreeHelper System.Windows.Media.VisualTreeHelper 逻辑树类(LogicalTreeHelp ...
- WPF进阶技巧和实战03-控件(5-列表、树、网格01)
列表控件 ItemsControl为列表项控件定义了基本功能,下图是ItemsControl的继承关系: 在继承自ItemsControl类的层次结构中,还显示了项封装器(MenuItem.TreeV ...
- WPF进阶技巧和实战07--自定义元素02
在01节中,研究了如何开发自定义控件,下节开始考虑更特殊的选择:派生自定义面板以及构建自定义绘图 创建自定义面板 创建自定义面板是一种比较常见的自定义控件开发子集,面板可以驻留一个或多个子元素,并且实 ...
- WPF进阶技巧和实战07--自定义元素01
完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚 ...
随机推荐
- spring cloud 网管篇zuul
1, consul 2, zuul 程序的yml 文件 server: port: 8083spring: application: name: zuulInfo # 应用名称 cloud: cons ...
- HttpClient4.3教程 第三章 Http状态管理
最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话.由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务 ...
- CentOS8安装Mysql5.7
检查是否安装mysql [root@iZ2ze8crquorxf6c7l0eluZ ~]# rpm -qa |grep mysql [root@iZ2ze8crquorxf6c7l0eluZ ~]# ...
- linux的一般命令------附加
1.cat /etc/redhat-release 查看linux版本 2. ps -ef|grep ssh 查看进程在不在 3. ...
- SpringCloud商品服务调用方式之feign
简介:改造电商项目 order-service服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) 官方文档: https://cloud.spring.io/sprin ...
- mysql复制内容到一张新表
-- 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 -- 2.只复制表结构到新表 CREATE TABLE 新表 SELECT * FROM 旧表 WH ...
- k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-2
三.ETCD集群部署 类似于走zookeeper集群分布式协调服务,可做以key v形式存储在ETCD中. 官方链接:https://github.com/coreos/etcd 分布式kv存储,为分 ...
- RHEL7.2系统下的软件管理(yum)、本地yum源和网络yum源的搭建
在Liunx系统中,rpm和yum都可以安装软件,但rpm存在安装软件的依赖性,yum安装软件需要yum源 1.yum yum install softwarename ##安装 yum repoli ...
- 微信小游戏 Three.js UI 2D text 简单方案
在微信小游戏中使用 THREE.js 引擎,没有合适的 UI 库可用,只能自己动手.图片啥的都还好,text 不好弄.text 要计算 width 和 height,不然事件响应范围不对. funct ...
- 1.3w字,一文详解死锁!
死锁(Dead Lock)指的是两个或两个以上的运算单元(进程.线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁. 1.死锁演示 死锁的形成分为两个方面,一个是使用 ...