Silverlight元素与控件详解
立即解锁
发布时间: 2025-08-26 01:18:37 阅读量: 17 订阅数: 46 AIGC 

### Silverlight 元素与控件详解
#### 一、图像相关
1. **图像拉伸模式 - UniformToFill**
- 该模式下,图像的宽度和高度会按比例调整,直到图像填满可用的宽度和高度。例如,将一张图片以该拉伸设置放入一个 100×200 像素的 Image 元素中,会得到一个 200×200 的图片,部分图像会被裁剪掉。
2. **图像错误处理**
- 多种因素可能导致图像无法显示,如使用不存在文件的 URI 或尝试显示不支持格式的图像。此时,Image 元素会触发 ImageFailed 事件。可以通过处理该事件来确定问题并采取替代措施,如当无法从网络获取大图像时,可使用嵌入应用程序程序集中的小占位符。
- 图像错误并非致命错误,即使无法显示图像,应用程序仍会继续运行。在这种情况下,Image 元素将保持空白。如果图像数据下载时间过长,图像也会空白。Silverlight 会异步执行图像请求,并在等待时渲染页面的其余布局。
#### 二、内容控件
1. **内容控件概述**
- 内容控件是一种专门用于容纳和显示内容的控件。从技术上讲,内容控件是一种只能包含单个嵌套元素的控件,这与布局容器不同,布局容器可以容纳任意数量的嵌套元素。
- 所有 Silverlight 布局容器都派生自 Panel 类,而所有内容控件都派生自 ContentControl 类。常见的内容控件包括 Label、Tooltip、Button、RadioButton 和 CheckBox 等。还有一些更专业的内容控件,如 ScrollViewer 等。
2. **Content 属性**
- ContentControl 类添加了 Content 属性,该属性接受单个对象。Content 属性支持任何类型的对象,提供了三种显示内容的方式:
- **元素**:如果使用派生自 UIElement 的对象作为内容控件的内容,该元素将被渲染。
- **其他对象**:如果将非元素对象放入内容控件,控件将调用 ToString() 方法获取该控件的文本表示。对于某些类型的对象,ToString() 会产生合理的文本表示;对于其他对象,它只是返回对象的完全限定类名。
- **其他对象,带有数据模板**:如果将非元素对象放入内容控件,并使用数据模板设置 ContentTemplate 属性,内容控件将渲染数据模板并使用其中的表达式从对象的属性中提取信息。
- 以下是不同方式设置按钮内容的示例:
```xml
<!-- 使用简单字符串作为内容 -->
<Button Margin="3" Content="Text content"></Button>
<!-- 使用图像作为内容 -->
<Button Margin="3">
<Image Source="happyface.jpg"></Image>
</Button>
<!-- 结合文本和图像 -->
<Button Margin="3">
<StackPanel>
<TextBlock Margin="3" Text="Image and text button"></TextBlock>
<Image Source="happyface.jpg" />
<TextBlock Margin="3" Text="Courtesy of the StackPanel"></TextBlock>
</StackPanel>
</Button>
<!-- 使用矢量图形作为内容 -->
<Button Margin="3" Height="70" Width="215">
<Grid Margin="5">
<Polygon Points="100,25 125,0 200,25 125,50" Fill="LightSteelBlue" />
<Polygon Points="100,25 75,0 0,25 75,50" Fill="LightGray"/>
</Grid>
</Button>
```
3. **嵌套内容模型的优势**
- 嵌套内容模型比向 Button 类添加额外属性来支持不同类型的内容更简单、灵活,还允许 Button 类暴露更简单的接口。因为所有内容控件都以相同的方式支持内容嵌套,所以无需为多个类添加不同的内容属性。
- 不过,不能总是通过更改控件的内容来获得想要的效果,如按钮的阴影背景、圆角边框和鼠标悬停效果等内置细节。可以通过应用新的控件模板来更改这些细节。
#### 三、内容对齐
1. **内容对齐属性**
- 在第 3 章中学习了如何使用 HorizontalAlignment 和 VerticalAlignment 属性在容器中对齐不同控件。当控件包含内容时,需要考虑内容与控件边框的对齐方式,这可以通过 HorizontalContentAlignment 和 VerticalContentAlignment 属性来实现。
- 这两个属性支持与 HorizontalAlignment 和 VerticalAlignment 相同的值,如 Top、Bottom、Left、Right、Center 和 Stretch。这些设置直接应用于嵌套的内容元素,可以通过多层嵌套创建复杂的布局。
2. **Padding 属性**
- 内容控件使用 Padding 属性在控件边缘和内容边缘之间插入空间,与 Margin 属性在相邻元素之间添加空白不同。例如:
```xml
<Button Content="Absolutely No Padding"></Button>
<Button Padding="3" Content="Well Padded"></Button>
```
- 没有设置 Padding 的按钮文本会紧贴按钮边缘,而设置了 Padding 的按钮会有更合适的空白空间。
#### 四、按钮控件
1. **按钮类型概述**
- Silverlight 识别三种类型的按钮控件:普通 Button、CheckBox 和 RadioButton,它们都派生自 ButtonBase 类。
- ButtonBase 类定义了 Click 事件,并添加了 IsFocused、IsMouseOver 和 IsPressed 只读属性,以及 ClickMode 属性,该属性决定按钮响应鼠标操作时触发 Click 事件的时机,默认值为 ClickMode.Release,也可以选择 ClickMode.Press 或 ClickMode.Hover。
2. **HyperlinkButton**
- HyperlinkButton 不绘制标准按钮背景,而是直接渲染提供的内容。使用文本时,默认显示为蓝色,但不下划线(可使用 TextDecorations 属性添加下划线效果)。当鼠标悬停在 HyperlinkButton 上时,鼠标光标会变为手形,可通过设置 Cursor 属性覆盖此效果。
- 有三种使用 HyperlinkButton 的方式:
- **导航到外部网站**:设置 NavigateUri 属性为指向目标网页的绝对 URL,可选择设置 TargetName 属性指定在浏览器框架中打开链接的位置。需要注意的是,导航离开当前页面将结束当前 Silverlight 应用程序,因此这种技术用途相对有限。
- **导航到另一个 Silverlight 页面**:确保页面上有 Frame 控件,并将 NavigateUri 设置为指向项目中另一个 XAML 文件的相对 URI。
- **在代码中执行任意操作**:不设置 NavigateUri 属性,直接处理 Click 事件以执行相应操作。
- 可以在 HTML 入口页面的 <object> 部分添加 enableNavigation 参数并将其设置为 false,以防止导航到外部网站,但仍可用于内部框架导航或触发 Click 事件。
3. **ToggleButton 和 RepeatButton**
- **RepeatButton**:只要按钮被按下,就会持续触发 Click 事件,而普通按钮每次用户点击只触发一次 Click 事件。
- **ToggleButton**:表示具有两种状态(点击或未点击)的按钮,点击后会保持按下状态,直到再次点击释放,即所谓的粘性点击行为。
- 这两个类都定义在 System.Windows.Controls.Primitives 命名空间中,通常不单独使用,而是用于构建更复杂的控件。例如,RepeatButton 是构建 ScrollBar 控件的组成部分,ToggleButton 用于派生 CheckBox 和 RadioButton 类。不过,它们都不是抽象类,可以直接在用户界面中使用或用于构建自定义控件。
4. **CheckBox**
- CheckBox 派生自 ToggleButton,用户可以切换其开关状态。打开 CheckBox 意味着在其中放置一个
0
0
复制全文
相关推荐










