本文简单介绍了Label,Button,ToggleButton,RepeatButton,CHeckBox,RadioButton,ToolTip,Popup,TextBlock,ScrollViewer,GroupBox,TabItem,Expander,TextBox,PasswordBox,ListBox,ComboBox,ListView,TreeView,ToolBar,Slider,ProgressBar,Calendar,DatePicker。
1.控件类基础
- 所有控件都继承自System.Windows.Control类。
1.1基本结构
- 设置控件内容对齐方式的能力;设置Tab键顺序的能力;支持绘制背景、前景和边框;支持格式化文本内容的尺寸和字体。
1.2画刷
- 可以在代码中设置颜色,也可以在XAML中设置颜色
- 代码中设置颜色
- 不直接使用颜色,而使用画刷(Brush对象)。
- 画刷可以更强大(单一色SolidColorBrush,渐变色LinearGradientBrush,TileBrush)。
- 画刷可以使用Colors静态属性定义颜色,如Colors.AliceBlue。
- 画刷可以使用SystemColors枚举中的系统颜色,如SystemColors.ControlColor。
- 画刷可以使用RGB获得颜色,如Color.FromRgb(red,green,blue)
- XAML中设置颜色
- 直接使用颜色,Background=“Red”
- 使用画刷,SolidColorBrush Color=“Red”
- 使用颜色代码,Background=“#FFFF0000”。使用十六进制#rrggbb或#aarrggbb。
- button对象不支持BorderBrush和BorderThinkness,而使用ButtonChrome装饰背景和边框。
- 代码中设置颜色
1.3字体
- 常用FontFamily,FontSize,FontStyle,FontWeight,FontStretch。
- 可通过TextDecorations和Typography属性,
- TextDecorations支持更高级的文本控制。如Baseline,OverLine,Strikethrough,Underline。
- Typography可访问只有某些字体才会提供的特殊字体变种。
- 字体继承:当设置任何字体属性时,属性值会流经嵌套的对象。但必须将FrameworkPropertyMetadata.Inherits标志设置为true。
- 字体嵌入,解决字体无法查找的问题。
2.内容控件(content control)
- 所有内容控件都继承自抽象类ContentControl
- 包括Label,ToolTip,Button,RadioButton,CHeckBox,ScrollViewer,UserControl。GroupBox,TabItem,Expander。
- 内容与边框对齐:HorizontalContentAlignment和VerticalContentAlignment
-
2.1Label
- 支持记忆符:能够为链接的控件设置焦点的快捷键。Alt+A可快速定位到上面的输入框。Alt+B可快速定位到下面的输入框。
- 如果不需要记忆符,可选择使用TextBlock。
-
2.2按钮
- WPF提供三种类型的按钮,Button,CHeckBox,RadioButton,都继承ButtonBase类。
- 可精确控制按下(ClickMode.Press),释放(ClickMode.Release),悬停(ClickMode.Hover)时触发。
- 所有按钮控件都支持访问键,通过添加下划线字符来标识访问键。用户按下Alt键和访问键,就会触发按钮单击事件。
-
2.2.1button按钮
- IsCancel,设为true,按钮就会成为窗口的取消按钮,当前窗口的任何位置按下Esc键,就会触发该按钮。IsDefault设置为true,按钮就成为默认接受按钮,回车就会触发。这2个功能非常实用。
-
2.2.2ToggleButton和RepeatButton
- 通常不单独使用,而是通过组合来构建更复杂的控件,或通过继承扩展其功能。
- RepeatButton类常用于构建高级的ScrollBar控件。
- ToggleButton通常用于派生出CheckBox类和RadioButton类。
- 这两个类都不是抽象类,可直接使用。
-
2.2.3CHeckBox
- IsChecked属性,可以是true,False,null。
- IsThreeState,False时只在2个状态切换,true时在3个状态切换。
-
2.2.4RadioButton
- 增加了GroupName属性,用于分组
- 单选按钮通常由容器分组,比如3个在StackPanel中,则这3个一组。可使用GroupName强制分组。
-
2.3ToolTip工具提示
- 可以使用简单的单行文字,也可以将该属性分为单独的元素,添加复杂的提示。
- ToolTip不能接收焦点,所以不能放置交互的控件。
- ToolTip为内容控件,因此可可调整background,padding,font,添加透明等。
- ToolTipService类定义了许多与ToolTip相同的属性,从而可以直接使用,无需嵌套ToolTip元素。ToolTipService还提供了2个路由事件ToolTipOpening和ToolTipClosing。
2.4Popup
- 基本与ToolTip相似
- popup控件永远不会自动显示,必须设置IsOpen属性。
- 默认popup.StaysOpen属性为true,并且popup会一直显示,直到明确的将Isopen属性False。
2.5TextBlock
TextBlock元素是Label控件的轻量级版本,对于显示少量可换行的文本内容,TextBlock 元素是非常完美的。尽管您可能不喜欢对TextBox控件使用文本修饰或改变它的排版,但可能希望在TextBlock元素中使用下划线。
3.特殊容器
3.1ScrollViewer控件
- 默认支持垂直滚动,可将HorizontalScrollBarVisibility设置为visible或auto来水平滚动。
- 还可使用代码滚动,LineUp和LineDown,PageUp和PageDown,LineLeft和LineRight,PageLeft和PageRight。还可使用ScrollToXxx这一类方法,如ScrollToEnd,ScrollToHome,ScrollToVerticalOffset,ScrollToLeftEnd,ScrollToRightEnd,ScrollToHorizontalOffset。
- IScrollInfo接口定义了一套方法,响应不同的滚动动作。
3.2GroupBox
- 继承自HeaderedContentControl最简单的1个,具有圆角和方框。
- 内部仍需要布局容器(如StackPanel)进行布置内容。
3.3TabItem
- TabItem表示TabControl控件中的一页。
- 唯一有意义的属性:IsSelected。
- Hearder定义标题(可以很复杂),content定义内容。
- 可使用TabStripPlacement侧边显示。
3.4Expander
- 对于大量信息时可考虑,折叠,展开。
- 默认向下扩展,可设置ExpandDirection为Up,Left,Right。
- 窗口超出无法显示时的方法
- 为窗口设置最小尺寸(使用MinWidth和 MinHeight属性),确保窗口在最小时也可以容纳所有内容。
- 设置窗口的SizeToContent属性,从而当打开或关闭Expander控件时,使窗口自动扩展为所需的大小。通常将SizeToContent属性设置为Manual,但也可以使用Width或Height,以使窗口为了适应所包含的内容在任意方向上扩展或收缩。
- 通过硬编码Expander 控件的Height 和 Width属性来限制其尺寸。但当Expander 控件中的内容太长时,可能会剪裁掉部分内容。
- 使用ScrollViewer控件创建可滚动的扩展区域。使用时需要硬编码ScrollViewer的尺寸,否则ScrollViewer会进行扩展以适应它包含的内容。
4.文本控件
- 提供3个:TextBox,RichTextBox,PasswordBox。PasswordBox直接继承自Control类,其它2个间接继承自TextBoxBase类。
4.1TextBox
- 通常用于单行文本,可设置TextWrapping在边缘换行,WrapWithOverflow会拉伸超出右边缘。
- 常用属性:MaxLength,MinLInes,MaxLines,VerticalScrollBarVisibility,IsReadOnly,IsEnabled。
- TextBox.AcceptsReturn属性为true时,接受Enter键输入。
- AcceptsTabs属性,允许用户插入Tab键。
- AutoWordSelection,true时会自动选中每个词。
- Undo功能,CanUndo属性设置为true。
- 拼写检查,SpellCheck.IsEnabled设置为true。为WPF特有功能,与其它软件无关。可自定义.lex扩展名的词典,并使用SpellCheck.CustomDictionaries属性关联自定义词典。
4.2PasswordBox
- 可通过PasswordChar选择不同的字符。
- 不支持剪切板,不能复制。
- 只能使用system.Security.SecureString对象,SecureString是纯文本对象,在内存中以加密的方式保存。加密密钥是随机生成。
5.列表控件
所有列表控件都继承自ItemsControl类,ItemsControl类本身又继承自Control类。
5.1ListBox
- SelectionMode属性设置为Multiple或Extended时,可多选。多选时SelectedItems替代SelectedItem。
- ListBoxItem用来添加元素。由于ListBoxItem继承自COntentControl,因此ListBoxItem可以包含嵌套的内容,比如可以是图片或形状+内容等复杂列表。
- 下例中StackPanel变成被listBoxItem封装的项。2种用法都可以。
- WPF中不需要CheckedListBox类,因为使用ListBox可以迅速构造出CheckedListBox。
- 如果希望查找当前选择的项,可直接从SelectedItem或 SelectedItems属性中读取。如果希望确定哪些项(如果存在的话)被取消选中,可使用SelectionChangedEventArgs对象的Removedltems 属性。类似地,可通过Addedlterms属性了解哪些项被添加到了选中的项中。在单项选择模式下,无论何时选项发生变化,总有一项被选中并总有一项被取消选中。在多项选择或扩展选择模式下,情况就未必如此了。
- 使用嵌套时,使用ContainerFromElement方法可以为特定的对象检索ListBoxItem。代码如下:ListBoxItem item = (ListBoxItem)lst.ContainerFromElement((DependencyObject)lst.SelectedItems[0]);
5.2ComboBox
- 与ListBox类似,包含ComboBoxItem集合。ComboBoxItem也可以包含人员嵌套元素。
- 下拉列表,一次只能选择一项。
- IsEditable属性为true时,可通过输入文本选择某一项。
5.3ListView
后面补充
5.4TreeView
后面补充
5.5ToolBar
后面补充
6.基于范围的控件
WPF提供了三个范围控件,ScrollBar,ProgressBar,Slider,都继承自RangeBase类,RangeBase类又继承自Control类。RangeBase类的属性:Value,Maximum,Minimum,SmallChange,LargeChange。
通常不直接使用ScrollBar,而使用ScrollViewer控件(封装了2个ScrollBar控件)。
6.1Slider
- 通过滑块调整大小。
- 属性:Orientation,Delay,TickPlacement,TickFrequency,Ticks,IsSnapToTickEnabled,IsSelectionRangeEnable。
6.2ProgressBar
- 不能与用户进行交互,长时间运行任务的进度。
- 可设置IsIndeterminate=true,会周期性的显示从左往右跳动的绿色脉冲,表示正在进行中。
7.日期控件
WPF包含2个日期控件,Calendar和DatePicker。
7.1Calendar
- Calendar控件显示日历,与在 Windows操作系统中看到的日历(例如,当配置系统日期时看到的日历)相似。该控件每次显示一个月份,允许从一个月份跳到另一个月份(通过单击箭头按钮),或跳到某个特定的月份(通过单击月份的标题头查看一年中的月份,然后单击月份)。
- DisplayDateStart,DisplayDateEnd,BlackoutDates,SelectedDate,SelectedDates,DisplayDate,FirstDayOfWeck,lsTodayHighlighted,DisplayMode,SelectionMode。
- 事件:SelectedDatesChanged
7.2DatePicker
- DatePicker 控件需要的空间更少。它模仿简单的文本框,该文本框以长日期格式或短日期格式保存日期字符串。DatePicker 控件提供了一个下拉箭头,当单击时,会弹出完整的日历视图,该视图和Calendar控件显示的视图相同。这个弹出视图显示在其他任何内容的上面,就像是下拉组合框。
- DisplayDateStart,DisplayDateEnd,BlackoutDates,SelectedDate,SelectedDates,DisplayDate,FirstDayOfWeck,lsTodayHighlighted,IsDropDownOpen,SelectedDateFormat。
- 事件:SelectedDateChanged