Silverlight控件使用指南
立即解锁
发布时间: 2025-08-26 01:42:16 阅读量: 13 订阅数: 46 AIGC 

### Silverlight 控件使用指南
#### 1. RichTextBox 中的交互元素
RichTextBox 不仅能用于显示和编辑富文本内容,还支持交互元素,如超链接(Hyperlink)。超链接是一种内联元素,显示为蓝色下划线文本,其工作方式与 HyperlinkButton 控件类似。可以通过设置 NavigateUrl 属性,让超链接在浏览器中打开外部页面(使用绝对 URL)或在应用程序中导航到新的 XAML 页面(使用相对 URL)。也可以为 Click 事件附加事件处理程序,触发自定义代码。示例代码如下:
```xml
<RichTextBox Margin="5" x:Name="richText" IsReadOnly="True">
<Paragraph>
<Hyperlink Click="cmdDoSomething_Click">Click this link.</Hyperlink>
</Paragraph>
</RichTextBox>
```
需要注意的是,只有将 RichTextBox.IsReadOnly 属性设置为 true 时,文档中的超链接才是可点击的。否则,超链接虽然外观相同,但无法点击(不过其文本可以编辑)。
此外,RichTextBox 还可以通过 InlineUIContainer 嵌入任何 Silverlight 元素,如按钮、复选框、图像或数据网格。示例代码如下:
```xml
<RichTextBox Margin="5" x:Name="richText" IsReadOnly="True">
<Paragraph Foreground="DarkRed" FontFamily="Trebuchet MS" FontSize="22"
FontWeight="Bold">
<InlineUIContainer>
<Image Source="bookcover.jpg" Stretch="None"></Image>
</InlineUIContainer>
Chapter I
</Paragraph>
...
</RichTextBox>
```
InlineUIContainer 存在两个重要限制:
- 若要使嵌入元素具有交互性(能获得焦点并接收输入事件),必须将 RichTextBox.IsReadOnly 属性设置为 true。否则,用户虽然能看到元素并编辑 RichTextBox 内容,但无法与嵌入元素进行交互。
- InlineUIContainer 不会在 RichTextBox.Xaml 返回的文档中表示,这意味着无法加载包含 InlineUIContainer 对象的现成 XAML 文档,只能通过编程方式添加。
#### 2. RichTextBlock 及其溢出系统
Silverlight 提供了 RichTextBox 的只读版本 RichTextBlock,它与 RichTextBlockOverflow 控件配合使用,可创建更复杂的布局。基本原理是将一个长文档拆分成多个部分,并将这些部分放置在页面的不同位置,从而实现多列文本显示或类似报纸的布局。
以下是一个简单示例,展示了如何使用 RichTextBlock 和 RichTextBlockOverflow 实现三列文本显示:
```xml
<Grid x:Name="LayoutRoot" Background="White" Margin="15">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<RichTextBlock x:Name="richText"
OverflowContentTarget="{Binding ElementName=overflow1}"></RichTextBlock>
<RichTextBlockOverflow x:Name="overflow1" Grid.Column="1"
OverflowContentTarget="{Binding ElementName=overflow2}"></RichTextBlockOverflow>
<RichTextBlockOverflow x:Name="overflow2" Grid.Column="2"></RichTextBlockOverflow>
</Grid>
```
当页面足够宽时,所有内容都显示在左列;随着浏览器窗口缩小,多余内容会依次添加到第二列和第三列。但如果最后一个 RichTextBlockOverflow 无法处理剩余内容,文档末尾将被截断。目前没有简单的解决方法,虽然可以将 RichTextBlock 和 RichTextBlockOverflow 控件包装在 ScrollViewer 中,但这会使第一列的 RichTextBlock 变高以容纳整个文档,导致其他两列空白。
在处理溢出文本时,主要通过 RichTextBlock 进行交互,使用 RichTextBlock.Blocks 集合设置和操作完整内容,并调整其格式。RichTextBlockOverflow 控件仅负责内容的显示位置。
#### 3. 范围基控件(Range-Based Controls)
Silverlight 包含三个基于范围概念的控件:ScrollBar、Slider 和 ProgressBar,它们都继承自 RangeBase 类,该类添加了 ValueChanged 事件、Tooltip 属性以及以下范围属性:
| 属性名 | 描述 |
| ---- | ---- |
| Value | 控件的当前值,必须介于最小值和最大值之间,默认值为 0,是一个双精度浮点数,可接受小数值。可通过 ValueChanged 事件监听值的变化。 |
| Maximum | 允许的最大值,默认值为 1。 |
| Minimum | 允许的最小值,默认值为 0。 |
| SmallChange | “小变化”时 Value 属性的调整量,不同控件含义不同。对于 ScrollBar 和 Slider,使用箭头键时值的变化量,ScrollBar 还可通过两端的箭头按钮操作,默认值为 0.1。 |
| LargeChange | “大变化”时 Value 属性的调整量,不同控件含义不同。对于 ScrollBar 和 Slider,使用 Page Up 和 Page Down 键或点击滑块两侧的条时值的变化量,默认值为 1。 |
通常不需要直接使用 ScrollBar 控件,更高级的 ScrollViewer 控件(包含两个 ScrollBar 控件)更实用。而 Slider 和 ProgressBar 有各自的用途。
##### 3.1 Slider 控件
Slider 是一种特殊的控件,适用于设置数值但数值本身不太重要的场景,如在媒体播放器中设置音量。示例代码如下:
```xml
<Slider Orientation="Horizontal" Minimum="0" Maximum="10" Width="100" />
```
0
0
复制全文
相关推荐







