探索Silverlight4:提升业务应用用户体验的新特性
立即解锁
发布时间: 2025-08-25 00:27:25 阅读量: 9 订阅数: 18 


Silverlight 4企业级应用开发入门
### 探索 Silverlight 4:提升业务应用用户体验的新特性
在当今数字化的时代,业务应用(LoB)的用户体验至关重要。Silverlight 4 引入了一系列新特性和功能,为开发者提供了更多的可能性,以开发出真正的业务应用,显著提升用户体验。本文将详细介绍 Silverlight 4 的关键增强功能,并通过一个图像查看器应用的示例来演示如何实现这些功能。
#### 一、Silverlight 4 的关键增强功能
Silverlight 4 带来了以下几个关键的增强功能,这些功能使得开发业务应用更加高效,同时为用户提供了更熟悉和优质的体验:
1. **拖放功能**:允许 UIElements 作为放置目标,通过引入 `UIElement.AllowDrop` 属性和相关的拖放事件,实现了拖放功能。
2. **鼠标滚轮支持**:通过托管代码扩展了 `UIElement.MouseWheel` 事件的实现,支持全屏模式和浏览器外模式下的鼠标滚轮操作。
3. **右键点击功能**:引入了 `MouseRightButtonDown` 和 `MouseRightButtonUp` 两个新事件,用于处理右键点击功能并实现自定义特性。
4. **打印功能**:引入了 `PrintDocument` 类,允许打印现有视觉树或自定义虚拟视觉树,支持浏览器内和浏览器外模式。
5. **剪贴板访问**:引入了 `System.Windows.Clipboard` 类,提供对系统剪贴板的访问,方便复制和粘贴数据。
6. **多语言支持**:支持双向文本,并增加了对更多语言(包括从右到左的语言)的支持,这对于开发全球化应用至关重要。
7. **XAML 解析器增强**:使 Silverlight 版本的 XAML 解析器更接近常规的 WPF 解析器。
#### 二、拖放功能详解
拖放功能一直是开发者喜爱的特性,它为用户带来了出色的体验。Silverlight 4 允许将 Silverlight UIElements 作为放置目标,支持部分受信任的浏览器内和浏览器外(OOB)应用,以及高信任的 OOB 应用。
##### 2.1 启用拖放功能的 UIElement 属性
`System.Windows.UIElement` 类包含两个需要启用的属性,以使控件成为放置目标:
- **AllowDrop**:这是启用拖放功能的关键属性,在 Silverlight 4 中引入。将其设置为 `true` 以允许特定的 UIElement 成为放置目标,默认值为 `false`。
- **Visibility**:除了将 `AllowDrop` 设置为 `true` 外,该 UIElement 的 `Visibility` 属性必须设置为 `Visibility.Visible`,以使控件可见并允许其成为放置目标。注意,`Visibility.Visible` 是 UIElement 的默认值,因此通常无需显式设置。
##### 2.2 启用拖放功能的 UIElement 事件
`System.Windows.UIElement` 类在 Silverlight 4 中包含四个新事件,可用于实现拖放功能。这些事件只有在 `AllowDrop` 属性设置为 `true` 时才会触发。具体事件如下表所示:
| 事件 | 描述 |
| --- | --- |
| DragEnter | 当输入系统报告以该特定事件为目标的底层拖放事件时触发。仅当该元素的 `AllowDrop` 属性设置为 `true` 时发生。事件参数类:`DragEventHandler`,Silverlight 4 中的新事件。 |
| DragLeave | 当输入系统报告以该特定事件为起点的底层拖放事件时触发。仅当该元素的 `AllowDrop` 属性设置为 `true` 时发生。事件参数类:`DragEventHandler`,Silverlight 4 中的新事件。 |
| DragOver | 当输入系统报告以该特定事件为潜在放置目标的底层拖放事件时触发。仅当该元素的 `AllowDrop` 属性设置为 `true` 时发生。事件参数类:`DragEventHandler`,Silverlight 4 中的新事件。 |
| Drop | 当输入系统报告以该特定事件为放置目标的底层拖放事件时触发。仅当该元素的 `AllowDrop` 属性设置为 `true` 时发生。`Drop` 事件是一个冒泡事件,允许对象树中父子关系的每个对象接收多个 `Drop` 事件。事件参数类:`DragEventHandler`,Silverlight 4 中的新事件。 |
##### 2.3 处理拖放的文件
Silverlight 4 的拖放功能仅支持处理拖放的一个或多个文件。包含拖放文件的数据对象可通过拖放事件的 `DragEventArgs.Data` 值访问。该数据对象实现了 `IDataObject` 接口,提供了数据传输的通用接口。对于 Silverlight,唯一支持的数据对象是 `DataFormat.FileDrop` 格式。可以使用 `DataObject.GetData(DataFormat.FileDrop)` 方法检索拖放的文件。根据选择和拖放的文件数量,它将返回一个 `FileInfo` 类型的数组,包含单文件(单个拖放文件)或多文件(多个拖放文件)的数据集。可以使用 `FileInfo.OpenRead` 或 `FileInfo.OpenText` 方法访问文件内容。
需要注意的是,只有 `Drop` 事件通过 `DragEventArgs.Data` 提供了可处理的拖放数据对象,以访问文件内容。`DragEnter`、`DragLeave` 和 `DragOver` 事件使用的 `DragEventArgs` 中的 `DragEventArgs.Data` 值为 `null`,如果尝试使用 `IDataObject` API 访问数据,将引发 `SecurityException`。
#### 三、开发图像查看器应用示例
为了演示拖放功能,我们将构建一个图像查看器应用,允许从本地系统拖放 PNG 和 JPG 类型的图像到应用的特定区域(放置区域)。有效的拖放图像将插入到应用中,点击插入的图像可以查看更大的视图。
##### 3.1 定义用户控件
以下是 `DragnDropDemo` 用户控件的 XAML 代码:
```xml
<UserControl x:Class="chapter7.DragnDropDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="110"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderThickness="3" BorderBrush="DarkBlue">
<Canvas x:Name="DropZoneCanvas"
Background="Cyan" Height="104" AllowDrop="True"
Drop="DropZoneCanvas_Drop"
DragOver="DropZoneCanvas_DragOver"
DragLeave="DropZoneCanvas_DragLeave">
<TextBlock HorizontalAlignment="Center"
FontWeight="Bold" FontSize="14"
Canvas.Top="40" Canvas.Left="30">
|Drop images here |</TextBlock>
</Canvas>
</Border>
<TextBlock Grid.Row="1" FontSize="12" Height="26" Margin="8">
Click on thumbnails for larger size</TextBlock>
<ScrollViewer Grid.Row="2" Height="450">
<toolkit:WrapPanel x:Name="ImageBox"
Orientation="Horizontal"
ScrollViewer.HorizontalScrollBarVisibility="Auto"/>
</ScrollViewer>
</Grid>
</UserControl>
```
为了启用拖放功能,将 `DropZoneCanvas` Canvas 布局控件的 `AllowDrop` 属性设置为 `true`,并至少为该控件实现 `Drop` 事件。在代码中,除了 `Drop` 事件,还将 `DragOver` 和 `DragLeave` 事件绑定到了
0
0
复制全文
相关推荐










