配色: 字号:
wpf控件
2017-11-18 | 阅:  转:  |  分享 
  
WPF控件Wpf中把控件的特性和控件的显示方式分开。控件在用户界面上的样子是由控件模板决定的,wpf为每个控件提供了默认的控件模板和相应的特
性,但是用户可以用自己的控件模板代替默认的控件模板,所以每个控件都可以成为开发者自己个性化的控件。何为控件?它是相对独立的模块它
具有对用记输入反应的能力每个控件具有特定图形表现形式(WPF把控件的特性和显示形式分开了)WPF中的控件基本上可以分以下4类内容控
件(ContentControls)条目控件(ItemsControls)文本控件(TextControls)范围控件
(RangeControls)1内容控件它只能有一个直的接子控件(Content),如果把一个没有内容的控件放到Content中
去,wpf会调用Object类的ToString方法,从面显示字符串。如果Content是UI元素,wpf就会调用OnRender
方法,从面让UI元素在自己在控件中画出。1.1.框架控件(Frame)它的主要作用是把其中的内容和界面上的其它部分分开,它里面可以
是任体东西,但只能有一个直接子控件。虽然Frame可以是其它控件的子控件,但是其宿主包容器的相关属性不传递到Frame中,即起到隔
离作用。microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://sche
mas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.micro
soft.com/expression/blend/2008"xmlns:mc="http://schemas.openxml
formats.org/markup-compatibility/2006"xmlns:local="clr-namespac
e:Frame_隔离"mc:Ignorable="d"FontSize="20"Title="MainWindow"
Height="350"Width="525">DefinitionWidth="285"/>.ColumnDefinitions>="1">
显示效果:由此可见,Frame隔断了相关属性的传递使用Frame的主要用途是
在其中嵌入HTML内容,在Frame中加入HTML只需要设置它的Source属性即可显示HTML数据.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2
006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/win
fx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/b
lend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-co
mpatibility/2006"xmlns:local="clr-namespace:Frame_显示HTML数据"mc
:Ignorable="d"Title="MainWindow"Height="350"Width="525">meSource="https://hao.360.cn/?wd=1001">1.2.WP
F按钮(Button)它是从BaseButton抽象类中派生出来,在BaseButton中定义了以下4个属性属性句功能描述Clic
kModeClickMode枚举,指明何时产生Click事件。Hover=鼠标移动到按钮上时,Press=在按钮接下鼠标左
键时Release=松开时?IsFocused只读,若为真,则该按按钮具有输入焦点IsMouseOver只读,若为真,则鼠标位于
按钮上IsPressed只读,若为真,则按钮被按下privatevoidButton_Click(objectsender
,RoutedEventArgse){MessageBox.Show("OnButtonClick");}owx:Class="Button_ClickMode.MainWindow"xmlns="http://schemas.m
icrosoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schem
as.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.micros
oft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlf
ormats.org/markup-compatibility/2006"xmlns:local="clr-namespace
:Button_ClickMode"mc:Ignorable="d"Title="MainWindow"Height="
350"Width="525">utton_Click">Hoverton_Click">Presston_Click">Release1.3.拔动按钮(Toggle
Button)ToggleButton中的事件事件名发生条件Checked当IsChecked=true时发生UnChecke
d当IsChecked=False时发生Indeterminate当IsChecked=NULL时发生1.4CheckB
ox控件用在可以有多个选项的地方,CheckBox并没有增加任何属性,只为ToggleButton提供外观。1.5RadioBu
tton控件多个选项中只能选一个,同一组选项通过GroupName来标记upName="1">12ton>3pName="3">41.6RepeatButton可以在按下时,不停的
发出Click事件它增加了两个属性Delay(ms)设置用户按下按钮多长时间后,开始重复发出Click事件,>0Interv
al(ms)每次发出Click事件的间隔,>01.7带有标题栏的内容控件(HeaderedConentControl)
它派生出三个类,ExpanderGroupBox和TabItem(TabItem和TabCtrl一起使用),HeaderedC
ontentControl除了Content之外还有一个Header属性,和Content一样,它也是一个Object类型,换句话
说,.net的任对象都可以成为Header.我们通常不会直接使用HeaderedContentControl本身,而是使用它的两个
派生类:GroupBoxExpander1.8分组框(GroupBox)最常用的地方是给CheckBox或RadioBox控件
分组1.9展开控件(Expander)在收缩时只展示标题,在展开时才会显示Content1.10标签控件(Label)主要用于
显示字符串,在wpf中TextBlockt和TextBox等都可以用来显示字符串,标签控件有别于它们的主要功能主要有以下两点:在默
认情况下,Label是只读的,颜色是灰色的内置了一个AccessText控件,可以直接设定热键到目标控件ss="Label_AccessText.MainWindow"xmlns="http://schemas.microsoft
.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.micro
soft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/
expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.o
rg/markup-compatibility/2006"xmlns:local="clr-namespace:Label_A
ccessText"mc:Ignorable="d"Title="MainWindow"Height="350"Wid
th="525">Code}">邮政编码(_P)<
/StackPanel>按下Alt+P后,输入焦点会跳到PostalCode上1.11为按钮设置热键tonClick="Button_Click">我有热键B(_B)privatevoidButton_C
lick(objectsender,RoutedEventArgse){MessageBox.Show("Test");
}1.12ToolTip能常是程序员用来的某些UI元素上显示帮助信息,ToolTip被定义在了FrameworkElement
类和FrameWorkContent中,这意味着不仅所有WPF控件能使用ToolTip控件而且图形和文档也可以使用ToolTip,
其交次ToolTip和其它Content控件一样,其中也可以包含任何WPF控件及组合。钮">Button使用ToolTip需要注意以下两点:1.虽然是一个控件,但本身并不具备输入功能它不能像其它控件那样作为其它控件
的子控件,它必须和控件的ToolTip属性相连通过ToolTipService类控制ToolTip:lTipService.HorizontalOffset="0"ToolTipService.VerticalOffset="
0">…
使用ToolTip主要是为保持多个控件的ToolTip属性一致性,若只使用一个控件,则可以直接
使用ToolTip的相关属性。1.13ScrollViewer当窗口中的内容比窗口要大时,通常要在窗口中显示滚动条。和所有Con
tent控件一样,它只能直接包含一个子控件。"1000">Button2.条目控件WPF的另一大类控件就是ItemsCont
rol,它只接从Control类中派生出来,写内容控件不同,ItemsControls中含有Items属性,这个属性具有ItemC
ollection类型。在内容控件中可以填充任何一个Object类型;在Items属性中则可以加入任何一个Object类型的对象。
WPF显示Items属性中的对象时,如果这个对象是UI元素,就直接调用UI元素的OnRender方法;如果这个对象不是UI元素,W
PF就会创建一个TextBlock,并在TextBlock中显示这个对象的Tostring方法所返回的结果;它除了有可以加入任何对
象的Items属性外,ItemsControl类中还包含有一个重要的属性ItemsSource.这个属性是用来作数据绑定的,一旦我
们使用的ItemsSource后Items属性就会被置为null;Items与ItemsSource只能选一个来用,并且It
emsSource的优先级更高。以下示出了ItemsControl及其派生类的结构图。从对象组件的角度看,基本上可以把这些类分成两
大类,一类是可以放入条目的条目包容器;另一类是条目本身。条目又可以分为带标题栏的条目和不带标题栏的条目。有些条目是内容控件,如Co
mboBoxItem,TabItem等。下表列出了条目包容器类及相应的条目类,虽然ItemsControl类中的属性中也可以加入任
.NET对象,但对某个具体的ItemsControl,其所包含的条目类又是相对稳定的,比如表中的ComboBox和ComboBox
.这些条目为控件提供了相对稳定的条目条目包容器类条目类ComboBoxComboBoxItemContextMenuMenuIte
mListBoxListBoxItemListViewListViewItemMenuMenuItemStatusBarStatu
sBarItemTabControlTabItemTreeViewTreeViewItem2.1Menu菜单是最常用的一个控件,
常位于应用程序窗口的顶部。每个菜单里面都包含有菜单的条目(MenuItem),MenuItem是一个带有标题的条目控件,它从Hea
deredItemControl类中派生出来。HeaderedItemControl类中有一个类型为Object的属性:Heade
r,在菜单条目中通常指它设置为字符串。有时候菜单条目下还会有子菜单,子菜单的条目下还会有下一层子菜单。技术上可以实现多级菜单,但是
不建议使用。现在Ribbon已经取代了菜单。菜单条目支持类似于CheckBox的选中标记,是bool类型.IsCheckable属
性表明这个条目是否支持选中标记,若设置为true,则表明可以设置选择标记。IsChecked表明这个条目的选中状态,它也是bool
类型,当这个值为true时,这个条目上显示一个选中的标记。菜单条目的常用属性如下表示:属性名功能Icon用来显示与菜单相关联的图像
,类型为Object,可以显示任何图形InputGestureText用来显示热键,如word里的复制功能菜单条目显示“Ctrl
+C”,它只显示并没有移植热键功能。IsCheckable表明菜单条目是否可以设置IsChecked属性IsChecked若Is
Checked为true,则该条目显示选中标记IsPressed表明用户是否按下这个条目Command菜单条目可以直接和命令相连,
通常和WPF中已定义的ApplicationCommands相连,也可以自定义Command下拉菜单例子:ass="Menu_test.MainWindow"xmlns="http://schemas.microsoft.com/w
infx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.c
om/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expres
sion/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/mar
kup-compatibility/2006"xmlns:local="clr-namespace:Menu_test"m
c:Ignorable="d"Title="MainWindow"Height="350"Width="525">ckPanel>ItemHeader="打开"InputGestureText="Ctrl+O">ageSource="Resource/Image/open.png">MenuItem>uItem.Icon>enuItem.Icon>on>.Icon>Header="恢复">tor>"Command="ApplicationCommands.Cut">ItemHeader="字体">Item>w>弹出菜单弹出菜单需要附加在UI元素的ContextMenu属性上。FrameworkElement里面有一个ContextMe
nu属性,程序员所要做的事就是构建弹出菜单,并在相应的UI元素上设置ContextMenu属性。由于FrameworkElemen
t是所有UI元素的基类,所以,WPF在广泛的范围内支持弹出菜单。2.2ToolBar使用WPF工具条要涉及两个类:ToolBar
Tray和ToolBar.ToolBarTray含有多个ToolBar,ToolBar包含多具WPF控件。ToolBarTray负
责工具条的排版,Background属性用来设定工具条的背景色,Orientation用来确定工具条的方向,它可以取水平(Hori
zontal)或垂直(Vertical)两值当toolBarTray里含有两个或两个以上的工具条时,需要设置工具条的Band属性,
这个属性用来指出工具条在ToolBarTray里出现的行或列。用自然数1,2,3…来表示。如果在同一行或同一列中,有两个或两个以上
的工具条,这时我们还要设置BandIndex属性。BandIndex属性用来指出工具条在某个行或某个列中出的位置。工具条中的另外两
属性:HasOverFlowItems和IsOverFlowOpen.这两个属性用来表示工具条是否溢出,以及溢出的工具条是否可见。
当工具条的宽度或高度大于工具条所能显示的高度或宽度时,工具条就只能显示其中的部分控件,这时工具条处在溢出状态,HasOverFlo
wItems属性为True.若有的控件比较重要,希望这个控件不被溢出时,可以设置工具条中的OverflowMode属性为Never
,这个属性是一个附加属性,所以可以把它附加到工具条中的任何一个控件上。Top"Orientation="Horizontal">ar>2.3Selector这几个控件的共同点是:其中包含
一个或多个条目供用户选择。Selector是一个抽象类,不可以直接创建Selector对象。Selector中常用的属性属性名功能
SelectedIndex读写属性,没有选中任何条目,返回-1,获选中了多个条目,则返回第一个条目的序号,序号从0开始Seleec
tedItem读写属性,设置或获取当前选中的对象,若没有选中返回nullSelectedValue这两个属性合起来实现对条目控件
的数据绑定SelectedPath2.4ComboBoxIsEditableIsReadOnly功能描述FalseFalse>可以
输入字符串的放法选择组合框中的条目;>不能输入组合框中条目中没有的字符串;>不能选择条目中的部分字符串;>不支持复制,粘贴功能Fa
lseTrue同上TrueFalse>不可以输入字符串的放法选择组合框中的条目;>不能输入组合框中条目中没有的字符串;>能选择条目
中的部分字符串;>支持复制,粘贴功能Treutrue>可以输入字符串的放法选择组合框中的条目;>能输入组合框中条目中没有的字符串;
>能选择条目中的部分字符串;>支持复制,但不能粘贴功能dIndex="0"IsEditable="False"IsReadOnly="True">
12ComboBox.Items>edIndex="0"IsEditable="True"IsReadOnly="False">>12<
/ComboBox.Items>2.5TabControl它就像一个文件夹,每个文件夹中包含特定的文件,
用一个标签贴在文件夹的侧面,然后把文件夹叠起来。这样,把比文件铺开在桌面上要少地方,这就是TabControl设计的最初目的。abControlDockPanel.Dock="Top">el>l>2
.6ListBoxListBox至少包含有一个LsitBoxItem,ListBoxItem是从ContentControl中派
生出来,因而它具有内容控件的特征。它有一个SelectionMode的属性,这是一个枚举类型:Single只能选一个Mutiple
可以选多个Extended用户需要同时按下“SHIFT”才能多选它用一个SelectedItems来表示选中的多个条目。stBoxSelectionMode="Multiple">item1
item2item3
item4de="Extended">item1item
2
item3ite
m4
2.7ListView与ListBox不同之处在于,它可以有多个列,并且每
个列都有头。SelectionMode默认为Extended.ew>idViewColumnWidth="100"Header="列2">>在在上面放数据,通常用于建立数据表,如直接和ADO的DataSet中的
Table相连(数据绑定)2.8StatusBaricalAlignment="Bottom">2.9TreeView和TreeViewI
temTreeView的条目为TreeViewItem.TreeViewItem也是一个条目控件。其直接父类是HeadedItem
sControl.TreeView中的相关属性:属性功能描述SelectedItem只读,表示当前选中的条目SelectedVal
ue只读,读取当前选中节点的值SelectedValuePath读写,用于数据绑定,和SelectValue联合,为选择节点的路径
TreeViewItem相关的属性属性功能描述IsExpanded读写,该节点是否处于展开状态,这个值的改变伴随关Expanded
和Collapsed传递事件的发生IsSelected读写,表圾这个节点是否被选中,改变会引发Selected,UnSelecte
d事件发生IsSelectionActive表示该节点是否具有输入焦点r="node1"IsExpanded="False">ViewItem>ewItem>记住:TreeViewItem也是一个条目控件,继承自HeaderedItemsControl文本控件Passwor
dBoxMaxLength属性用于设置用户可以输入的最多按键个数,PasswordChar用于设置输入口令的掩藏字符。Passwo
rd属性用于设置/读取密码数据.ar="">4.2TextBoxTextBoxBase常用属性属性功能AcceptsReturn
为true时,输入”Enter”在光标处插入换行,否则忽略EnterAcceptsTabTrue,输入tab,在光标处插入制表符A
utoWordSelectionTrue,选择某个但从的部分字每时,自动选择整个词CanRedo这是一个只读属性,表示是否可以重做
前一个动作CanUndo这是一个只读属性,表示是否可以恢复前一个动作ExtentHeight返回可见区域高度ExtentWidth
返回可见区域宽度HorizontalOffset水平滚动位置HorizontalScrollBarVisibility设置水平滚动
条是否可见IsReadeOnly是否只读IsUndoEnable是否可以进行恢复操作SpellCheck设置SpellCheck.
IsEnabled属性,可以自动检测单词是否拼写错误UndoLimit设置可以恢复的次数VerticalOffset垂直方向滚动位
置VerticalScrollBarVisibilityC垂直滚动条是否可见ViewprotHeight设置视窗高度Viewpor
tWidth设置视窗宽度若是没有设置TextBox的大小,则其大小会随着里面的内容变化面变化,TextBox的宽度不变的情况下,设
置TextWraping属性为Wrap,那么其中的文字会自动换行,若为NoWrap,则不会自动换行。若为WrapWithOverf
low,则只在不同的词间分行,若有一个很长的词,那么就可能只显示这个词的一部分。bled="True">RichTextBoxTextBox中的字符只能有一种格式,若你需要用多种方式显示
字符,或在字符中插入其它的图像,声音等对象时,就需要使用RichTextBox有一个Document属性,其类型为FlowDocu
ment.正是这个属性,使得RichTextBox中的内容丰富起来。5范围控件Minimun5.2Slider滑动条是一个边上带有刻度的范围控件,在某些情况下使用滑动条很直观,如多媒体播放器,用户可以直接通过拉动滑动条来选择要看的视频位置。刻度的位置由TickPalcement属性确定,其类型为TickPlacement,是一个枚举类型5.3ProgressBarMinimum默认为0Maximum默认为100通常要使用动动画??,若不想用动画,而又不在乎什么时候完成,可以把IsIndeterminate=true6小结从功能的角度,这些控件可以分成四大类:内容控件条目控件文本控件范围控件控件是构建UI的重要内容,WPF围绕控件开发了一系列新技术:WPF中独特的传递事件系统和命令,数据绑定技术,控件模板,风格以及控件的动画。
献花(0)
+1
(本文系luan_it首藏)