DotNet关键知识点——WPF篇(二)
1. WPF控件概览
控件类型 | 关键基类 | 实例类型 | 说明 |
孤立控件 | (Individual Control) | ||
ContentControl | Content属性,对应一个object,如该元素不继承UIElement,则显示其ToString()字符串内容 | ||
Label | 助记键(Mnemonic Keys):在字符前加_对应Alt+该字符,并用Target=”{Binding ElementName=???}”绑定聚焦对象 | ||
Button | 快速访问(Access Keys):在字符前加_对应Alt+该字符 IsDefault="True"对应Enter键 IsCancel="True"对应Esc键 |
||
Checkbox | bool? IsChecked | ||
RadioButton | GroupName属性用来手工分组 | ||
TextBlock | |||
ProgressBar | |||
Slider | |||
TextBox | IsReadOnly=”True” TextWrapping=”Wrap” ???ScrollBarVisibility=”…” |
||
Image | Stretch = None - 维持原图 Fill - 宽高变形以填满 Uniform - 宽高不变顶两边 UniformToFill - 宽高不变裁图填满 StretchDirection = Both - 用Stretch属性控制 DownOnly - 只下变换 UpOnly - 只上变换 |
||
集合控件 | (Item Control) | ||
ItemsControl | 集合控件基类 | ||
ListBox/ListBoxItem | 也可不使用ListboxItem,而直接使用如CheckBox SelectionMode可选Single, Multiple和Extended(用Ctrl复选) |
||
ComboBox /ComboBoxItem |
内容和ListBox类似 IsReadOnly - 可否输入值 IsEditable - 可否输入任意值 IsDropDownOpen - 是否处于下拉 |
||
TreeView /TreeViewItem |
TreeViewItem.Header为文本 叶节点可直接使用如CheckBox |
||
Menu/MenuItem,Separator | MenuItem.Command和命令关联 可用分隔条<Separator/> |
||
ContextMenu /MenuItem,Separator |
绑定到其他控件ContextMenu属性,右键或聚焦并Shift+F10时弹出 | ||
ToolBar/..,Separator | 加入Toolbar的控件风格可能改变 控件上关联ToolBar.OverflowMode=”Always”,”AsNeede”,”Never” |
||
ToolBarTray | |||
StatusBar | 类似ToolBar | ||
布局控件 | (Layout Control) | ||
Panel | 布局控件的基类 但大部分布局控制属性在FrameworkElement类中定义 |
||
Grid/GridSplitter | GridSplitter可独占一行/列,也可靠于边缘,ResizeBehavior和ResizeDirection用于指定调节行为 | ||
UniformGrid | 无Span关联属性 | ||
StackPanel | 上->下 / 左->右 / 右->左,流动方向上的对齐控制无效,下同 | ||
WrapPanel | 左->右 / 右->左 × 横 / 纵向优先 | ||
DockPanel | LastChildFill最后控件填满 关联属性Dock = "Left", "Top", … |
||
Canvas | 完全自定义位置,采用其Top/Bottom, Left/Right, ZIndex关联属性,Margin可加性有效,对齐属性失效。 |
主要类的继承关系:
DepenencyObject - Visual - UIElement - FrameworkElement - Control – ItemsControl
- ContentControl
- Separator
- Thumb - GridSplitter
- Panel - Grid, UniformGrid
- StackPanel, WrapPanel, DockPanel
- Canvas
- TextBox
- Image
- ToolBarTray
ItemsControl – TreeView
- StatusBar
- Selector – ListBox - ListView
- ComboBox
- MenuBase – Menu, ContextMenu
- HeaderedItemsControl – ToolBar
- MenuItem
- TreeViewItem
ContentControl – ButtonBase – Button
- ToggleButton – RadioButton
- CheckBox
- RangeBase – ProgressBar
- Slider
- Label
- ListBoxItem - ListViewItem
控件的关联属性(Attached Properties)
如<Button Grid.Row=”1”/>等。在代码中通过Button1.SetValue(Grid.RowProperty, 1)实现。 控件类的关联属性均以类中的DependencyProperty类型静态成员出现,后缀Property,如上述Grid.RowProperty。
控件的Tab顺序
设TabIndex属性;用KeyboardNavigation.IsTabStop=”False”关闭。
虚拟化集合控件(Virtualization in Item Controls)
将集合控件的ItemsPanel属性指定为自定义的<ItemsPanelTemplate><VirtualizingStackPanel/></ItemPanelTemplate>,改变集合控件默认使用StackPanel的行为,以仅为可见项目开启资源。同时为避免内部过程关闭虚拟化,在集合控件上要设置关联属性:VirtualizingStackPanel.IsVirtualizing=”True”。
主要布局控制属性
1. Margin具有可加性,并依赖布局控件具体行为
2. Height, Width中数字后*号表示可按比例缩放
3. 代码中转移一个控件必须先删除后再添加。
有关类的注记
FrameworkElement.NameProperty是定义元素的名称的属性,即XAML中Name定义对应的代码(Window中)实例名称。
VisualTreeHelper的点击测试
HitTestResult VisualTreeHelper.HitTest(Visual visual, Point point),DependencyObject HitTestResult.VisualHit指向从visual的point位置搜索视觉树找的到位于最顶端的对象。
有关WPF视觉树(Visual Tree)和逻辑树(Logical Tree)概念可参考资料[1]。
参考资料
[1] http://msdn.microsoft.com/en-us/library/ms753391.aspx