本文系本站原创,欢迎转载! 转载请注明出处:
[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)[](http://blog.csdn.net/mr_raptor/article/details/7212155)
在Silverlight中,基本上所有的控件都在System.Windows命名空间里。
控件的继承结构如下(以Button为例):
原创地址:[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)
![](https://box.kancloud.cn/2016-04-27_57205d931d404.gif)
**下面我们依次分析继承关系中的每个层次:**
**System.Threading.DispatcherObject**
所有的Silverlight对象都派生自DispatcherObject。 Silverlight工作在Single Threading Apartment(STA)模型下,DispatcherObject的主要职责就是处理线程的并发和同步。当有消息发生的时候,比如鼠标点击或者是按钮被按下,这些消息将被发送到DispatcherObject,它将负责验证代码是否运行在当前线程。
**System.Windows.DependencyObject
微软在设计Silverlight的时候,考虑的是一种基于属性的架构。换句话说,对象的行为主要是用属性来表现的,而不是方法,函数和事件。现在,我们只需要记住它的定义就可以了。在后面的章节中,我们将有专门的问题来论述这个主题。
System.Windows.Media.Visual**
Visual是一个显示支持类,用于抽象所有关于绘制显示的描述。它是一个抽象类,每个Framework Element对象都必须继承该类。该类的主要作用是为Silverlight提供呈现支持,主要包括输出显示,透明度,坐标转换,区域剪切等。另外,Visual类同时是非托管的MilCore.dll和托管的Silverlight类之间的桥梁。如果一个类从Visual派生,它就可以在窗口中显示出来。这样,当你想创建你自定义的用户界面时,你就可以使用Visual对象。
**System.Windows.UIElement**
UIElement类主要处理三个方面的内容:布局,输入和事件。该类继承自Visual类,其中定义了很多与输入和焦点有关的特性,例如键盘事件,鼠标和笔输入等。同时,该类还包括一些与Silverlight事件模型有关的API。
**System.Windows.FrameworkElement**
FrameworkElement派生自UIElement,在UIElement的基础上,它添加了很多其他功能,比如水平对齐,竖直对齐,边距,逻辑树、对象生命周期事件、支持数据绑定和动态资源引用、支持样式和动画等等。
**System.Windows.Shapes.Shape**
这个类可以用于创建基本的图形,比如长方形,多边形,椭圆,线和路径等。
**System.Windows.Controls.Control**
这个类提供一些基本的界面控件,比如文本框。按钮,列表框等。另外,它还添加了一些扩展属性,比如字体,前景色和背景色等。
**System.Windows.Controls.ContentControl**
ContentControl用于显示多行文本。表示包含单项内容的控件。像 Button、CheckBox 和 ScrollViewer 这样的控件直接或间接继承自该类。
**System.Windows.Controls.ItemsControl**
这是所有能够支持多个条目显示的控件的基类,例如列表框和树形视图。一般而言,ItemsControl 具有两个角色:可用于呈现一个固定的项集,或者用于显示从指向某个对象的数据绑定中获取的列表。如果要显示对象源中的数据,则应将 ItemsSource 指定为对某个对象的引用,例如使用ListBox绑定数据源到ItemsSource上。
**System.Windows.Controls.Panel**
面板(Panel)可以用做所有布局的容器。它可以包含一个或多个子控件并且可以将他们按照布局单位进行排列。这些容器是Silverlight布局系统的基础,并且合理地使用容器是对你的界面内容进行灵活布局的关键。
原创地址:[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)
Silverlight控件按功能分,包含:
- **用户交互控件:**
Button, CheckBox, Image, TextBlock, TextBox等
- **容器控件:**
Border,Canvas,Grid, StackPanel, Viewbox, ScrollViewer等
原创地址:[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)
<table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p align="center"><strong>容器控件名</strong></p></td><td valign="top"><p align="center"><strong>作用</strong></p></td></tr><tr><td valign="top"><p>Canvas</p></td><td valign="top"><p align="left">定义一个区域,在该区域中可以使用相对于该区域的坐标显式定位子元素。一个画布可包含一个或多个 UIElement 对象。</p></td></tr><tr><td valign="top"><p>Grid</p></td><td valign="top"><p align="left">定义由列和行组成的网格区域。</p></td></tr><tr><td valign="top"><p>StackPanel</p></td><td valign="top"><p align="left">将子元素排列成一行(可沿水平或垂直方向)。</p></td></tr><tr><td valign="top"><p>Border</p></td><td valign="top"><p align="left">在另一个对象的周围绘制边框、背景或同时绘制二者。</p></td></tr><tr><td valign="top"><p>ScrollViewer</p></td><td valign="top"><p align="left">表示可包含其他可见元素的可滚动区域。</p></td></tr></tbody></table>
原创地址:[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)
<table border="1" cellspacing="0" cellpadding="0" width="101%"><tbody><tr><td valign="top"><p align="center"><strong>用户交互控件名</strong></p></td><td valign="top"><p align="center"><strong>主要作用</strong></p></td></tr><tr><td valign="top"><p>Button</p></td><td valign="top"><p>提供一个单击事件以响应来自鼠标、键盘、触笔或其他输入设备的用户输入。</p></td></tr><tr><td valign="top"><p>CheckBox</p></td><td valign="top"><p>使用户能够选择(选中)或清除(取消选中)某个选项。CheckBox 可以具有三种状态:选中、取消选中和不确定。使用 CheckBox 可以为用户提供一个选项(例如"真/假"或"是/否"),也可以使用户从选项列表中进行选择。CheckBox 是一个 ContentControl。</p></td></tr><tr><td valign="top"><p>HyperlinkButton</p></td><td valign="top"><p>表示显示超链接的按钮控件。单击 HyperlinkButton 后,用户可以导航到同一 Silverlight 应用程序内的外部网页或内容。</p></td></tr><tr><td valign="top"><p>Map</p></td><td valign="top"><p>表示默认地图类。</p></td></tr><tr><td valign="top"><p>Image</p></td><td valign="top"><p>显示 PNG 或 JPEG 格式的图像。Image 控件可显示具有 1 位、4 位或 8 位颜色深度的索引图像,或者具有 24 位或 32 位颜色深度的真彩色图像。</p></td></tr><tr><td valign="top"><p>ListBox</p></td><td valign="top"><p>包含一个项集合。可通过将该控件绑定到数据源或通过显示未绑定的项来填充该控件。列表框是一个项控件,这意味着您可以使用包含文本或其他控件的项来填充它。</p></td></tr><tr><td valign="top"><p>MediaElement</p></td><td valign="top"><p>承载音频或视频内容。MediaElement 控件提供了一个可在其图面上显示视频(如果不存在视频,则播放音频)的矩形区域。</p></td></tr><tr><td valign="top"><p>PasswordBox</p></td><td valign="top"><p>用于在单行和不换行的文本区域中输入敏感或私有信息。您无法查看实际文本,而只能查看表示内容的字符。</p></td></tr><tr><td valign="top"><p>RadioButton</p></td><td valign="top"><p>使用户可以从一组选项中选择一个选项。可以通过将 RadioButton 控件放到父控件内或者将每个 RadioButton 的 GroupName 属性设置为特定的组来对 RadioButton 进行分组。分组后,各个 RadioButton 控件之间是互斥的。</p></td></tr><tr><td valign="top"><p>ScrollViewer</p></td><td valign="top"><p>封装一段内容,并提供最多两个 ScrollBar 控件来滚动内容视区。ScrollViewer 控件使您能够设置视区相对于内容的大小,以及设置是否显示水平和垂直 ScrollBar 控件。</p></td></tr><tr><td valign="top"><p>Slider</p></td><td valign="top"><p>使用户可以沿着一条轨道移动 Thumb 控件以从一个值范围中进行选择。</p></td></tr><tr><td valign="top"><p>TextBlock</p></td><td valign="top"><p>显示少量文本内容。可以使用 Text 属性来设置 TextBlock 的内容。或者,也可以将 Inlines 属性设置为一个 Inline 对象集合,例如 Run 或 LineBreak 对象。</p></td></tr><tr><td valign="top"><p>TextBox</p></td><td valign="top"><p>用于获取用户输入,也可用于显示文本。文本框控件通常用于可编辑文本,但也可以设置为只读。文本框可以显示多个行,并且可以根据控件的大小自动换行。</p></td></tr><tr><td valign="top"><p>WebBrowser</p></td><td valign="top"><p>当应用程序在浏览器外承载时为显示 HTML 内容提供图面。</p></td></tr></tbody></table>
上表的控件是WindowsPhone中Toolbox中显示出来的可用控件,很明显这些控件不能充分满足开发者的需要,微软之所以这么做,无非也是想减少WP7应用程序的大小,从而不将一些非常用控件引入起来。如果想使用自定义控件或者Silverlight控件,则要在工程里添加程序集引用,然后在XAML根元素里引入命名空间,才可以使用外部控件。例如:下载并安装Silverlight Toolkit的扩展控件:[http://silverlight.codeplex.com/](http://silverlight.codeplex.com/)
1. 在工程里添加引用。
![](https://box.kancloud.cn/2016-04-27_57205d9347dbd.gif)
原创地址:[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)
2. 将安装的Toolkit程序集加载到工程中,路径为:C:\Program Files\Microsoft SDKs\Windows Phone\v7.1\Toolkit\Oct11\Bin
![](https://box.kancloud.cn/2016-04-27_57205d935f013.gif)
原创地址:[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)
3. 使用外部控件
![](https://box.kancloud.cn/2016-04-27_57205d938338d.gif)
原创地址:[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)
- 从解决方案浏览器里可以看到Microsoft.Phone.Controls.Toolkit程序集已经加入到了工程里(如图中1所示)。
- 在XAML的根元素里引用其命名空间(如图中2所示)。
- 添加控件元素代码(如图中3所示)。
- 可以看到页面上已经显示出对应的控件。
除此之外,还有大名鼎鼎的telerik设计的控件:[http://www.telerik.com/products/windows-phone.aspx](http://www.telerik.com/products/windows-phone.aspx)
本文系本站原创,欢迎转载! 转载请注明出处:
[http://blog.csdn.net/mr_raptor/article/details/7229618](http://blog.csdn.net/mr_raptor/article/details/7229618)[](http://blog.csdn.net/mr_raptor/article/details/7227260)[](http://blog.csdn.net/mr_raptor/article/details/7212155)
- 前言
- WindowsPhone之我见
- 整理Windows Phone 7教程(很全面)
- WindowsPhone XAML语法详解
- WindowsPhone控件详解及引用外部控件Silverlight Toolkit
- Silverlight for Windows Phone Toolkit升级说明
- WindowsPhone统计图表控件 - 第三方控件visifire
- WindowsPhone第三方控件-Resco MobileForms Toolkit 2012
- Windows Phone 7 处理休眠和墓碑的恢复
- WindowsPhone自定义控件详解(一) - 控件类库分析
- WindowsPhone自定义控件详解(二) - 模板类库分析
- WindowsPhone自定义控件详解(三) - 实战:自定义带水印的PasswordBox控件,WatermarkedPasswordBox
- WindowsPhone下拉刷新控件 - PullRefreshListBox(一)