前言:
粗略而言,使用最多控件的基本为6类,即:
(1)布局控件:可以容纳多个控件或嵌套其他布局控件。有Grid、StackPanel、DockPanel等。他们拥有共同的父类Panel。
Panel族控件包含:
StackPanel、UniformGrid、WraPanel……;
内容属性为Children。
(2)内容控件:只能一个其他控件或布局控件作为他的内容。有Window、Button等。他们的父类为ContentControl。
ContentControl族控件包含:
Button、Label、CheckBox……;
内容属性的名称为:Content
其中,HeaderedContentControl是ContentControl的派生类。
HeaderedContentControl族控件包含:
Expander、GroupBox、HeaderedContentControl、TabItem;
内容属性为Header和Content。
(3)带标题内容控件:相当于一个内容控件,但可以加一个标题(Header),标题部分亦可容纳一个控件或布局控件。GroupBox、TabItem等是这类控件的典型代表。他们的父类为ComboBoxContentControl。
(4)条目控件:可以显示一列数据,一般情况下这列数据的类型都相同。有ListBox、ComboBox等。他们的父类为ItemsControl。
ItemsControl族控件包含:
Menu、MenuBase、ComboBox、ItemsControl、ListBox、ListView、TabControl、TreeView、StatusBar……;
内容属性的名称为:Items或ItemsSource。
(5)带标题条目控件:相当于一个条目控件加上一个标题显示区。TreeViewItem、MenuItem都属于此类控件。这类控件的节点显示在其Header区域,子节点则显示在其条目控件区域。他们的控件的父类为:HeaderedItemsControl。
HeaderedItemsControl族控件包含:
MenuItem、TreeViewItem、ToolBar;
内容属性为Items,ItemsSource和Header。
(6)特殊内容控件:TextBox等。
补充:
Decorator族:
本族元素是在UI上起装饰效果的。
包含:Border、ViewBox……;
内容属性为Child。
菜单、工具栏和状态栏
菜单与工具栏位于主页面顶部。状态栏位于主页面下方,显示当前页面的状态信息。
1 Menu
WPF菜单可分为Menu和ContextMenu两种。ContextMenu称为上下文菜单,只有当用户发出请求(右击)或按下Shift+F10组合键时,会弹出上下文菜单,故上下文菜单又可称为弹出式菜单,在后面会提到。
创建菜单代码示例:
<DockPanel LastChildFill="False"> <!--可以考虑这里没有LastChildFill时,或者为True时是什么情况->
<Menu DockPanel.Dock="Top">
<MenuItem Header="_File">
<MenuItem Header="_Open" Click="MenuItem_Click"/>
<MenuItem Header="_Exit" Click="MenuItem_Click_1" />
</MenuItem>
<MenuItem Header="_Edit">
<MenuItem Header="_Cut"/>
<MenuItem Header="_Copy"/>
</MenuItem>
</Menu>
</DockPanel>
运行结果:
2 ToolBar
工具栏,位于菜单下方,具有宿主类型(ToolBarTray)和项类型(ToolBar)。ToolBarTray可视为ToolBar的容器,用于调整工具栏的大小及位置。
代码示例:
<DockPanel LastChildFill="False">
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Button Content="Open"/>
<Button Content="Cut"/>
<Button Content="Copy"/>
<Button Content="Pase"/>
<Button Content="Exit"/>
</ToolBar>
<ToolBar Header="Search">
<TextBox Width="120"/>
<Button Content="Go" Width="25"/>
</ToolBar>
</ToolBarTray>
</DockPanel>
运行结果:
从此例可以看出:工具栏可用做控件容器。
3 StatusBar
状态栏控件,通常位于窗体底部,用于显示状态文本信息。StatusBar也是容器控件。要呈现信息的控件是它的子元素。
代码示例:
<StatusBar DockPanel.Dock="Bottom">
<TextBox Text="This is a StatusBar"/>
</StatusBar>
运行结果:
同时应该设置窗体的属性,让状态栏的右下角呈现调整区域。属性为:ResizeMode="CanResizeWithGrip"
补充:
Window的ResizeMode(大小调整模式)属性:NoResize、CanMinimize、CanResize(默认值)和CanResizeWithGrip。
其中:
NoResize:不可调节,同时没有最大最小按钮;
CanMinimize:不可调节。但可以最小化;(此时最大化按钮不可用)
CanResize:可调节(默认);
CanResizeWithGrip:可根据网格调节;(窗口右下脚显示可调节网格)
窗口控件(容器控件)
容纳子控件,并为子控件提供可视化分组。
布局控件都可视做容器控件。
1 Expander
Expander是可以展开和折叠的控件,由标题头和内容两部份组成。其中,Header属性设置标题头;Conent属性设置内容。
代码示例:
<Expander Header="Expander example">
<Border Margin="10" Padding="9">
<StackPanel>
<TextBox>I am first textbox</TextBox>
<TextBox>I am second textbox</TextBox>
</StackPanel>
</Border>
</Expander>
运行结果:
其中,解释一下<Border Margin="10" Padding="9">
代码的含义:Margin是指Border与其父控件之间的距离;Padding是指Border与其子控件之间的距离。
注意:Expander:在代码运行后需要人为的点击标题头,其中的内容才会展开;如果想要在代码运行后,即为展开状态,则要设置属性IsExpanded=“True”。这样就不需要人为的点击,就会自动展开。
2 TabControl
TabControl支持传统的标签风格,设计用户界面时,常会用选项卡设置、标签式浏览器等。
代码示例:
<TabControl Margin="10">
<TabItem Header="Tab1">
<StackPanel>
<TextBlock Text="hello"/>
</StackPanel>
</TabItem>
<TabItem Header="Tab2">
<StackPanel>
<TextBlock Text="hello world!"/>
</StackPanel>
</TabItem>
</TabControl>
运行结果:
3 GroupBox
GroupBox是对控件进行分组的可视化容器控件,并将同类控件归类,置于GroupBox控件中。
代码示例:
<GroupBox Header="hello" Margin="10" Padding="9">
<StackPanel>
<TextBlock Text="hello world!"/>
<TextBlock Text="hello world!"/>
</StackPanel>
</GroupBox>
运行结果:
范围控件
WPF具有3个范围控件:Slider、ScrollBar和ProgressBar。这些控件这些控件在规定的范围内取值,继承自RangeBase。
RangeBase类的公共属性有:
Maximun:上限的最大值。
Minimum:下限的最小值。
LargeChangeValue:属性值的最大变化。
SmallChangeValue:属性值的最小变化。
Value:控件当前值。
其中,当Value值改变了,Slider、ScrollBar事件响应,但是ProgessBar控件在Value变化时,不响应,它能响应Click、Dragdrop、Dragover、Mousemove、Mouseup、Mousedown这六个事件。
其中:
DragDrop:拖放完成,也就是鼠标拖入对象并在拖放区域释放。
DragEnter:拖放进入,也就是鼠标拖放对象进入拖放区域。
DragLeave:离开拖放区域。
DragOver:拖放对象悬浮于拖放区域,在拖放区域内移动时多次触发。
1 Slider
Slider控件允许用户在可视化的最小值和最大值范围之间取值。
其中,Slider的属性:
IsSnapToTickEnabled:指示 Slider 是否自动将 Thumb 移动到最近的刻度线。
TickPlacement:标记位置?
TickFrequency:标记间隔大小。
IsSelectionRangeEnabled:是否加范围选择。
SelectionStart:选择范围初始值。
SelectionEnd:选择范围终止值。
代码示例:
<Slider Minimum="0" Maximum="100" Value="50" IsSnapToTickEnabled="False" TickPlacement="BottomRight" TickFrequency="5" IsSelectionRangeEnabled="True" SelectionStart="50" SelectionEnd="100"/>
运行结果: