Silverlight 2 转换和剪辑区域
2009-02-09 11:52:17 来源:WEB开发网图 11 中显示了部分 XAML 源代码(代码下载中包含完整的代码)。Page 构建程序调用 WebClient.OpenReadAsync 来启动新闻源的异步请求,而完成事件处理程序会将标题从源复制到 TextBlock。然后,它将调用 Storyboard.Begin 开始滚动 TextBlock,并通过编程使 DispatcherTimer 每五分钟触发一次 Tick 事件。Tick 事件处理程序提交新闻源的最新请求,它最终会存储在某个私有字段中。
图 11 Page.xaml.cs
using System;
namespace VideoOverlay
{
public partial class Page : UserControl
{
private const double _offset = 20.0;
private const double _secondsPerFrame = 10.0;
private const string _separator = " ? ";
private readonly Uri _uri =
new Uri("http://feeds.feedburner.com/AbcNews_TopStories");
private DispatcherTimer _timer = new DispatcherTimer();
private string _text = null;
public Page()
{
InitializeComponent();
// Launch an async request for current news headlines
WebClient wc = new WebClient();
wc.OpenReadCompleted += new
OpenReadCompletedEventHandler(OnInitialDownloadCompleted);
wc.OpenReadAsync(_uri);
}
private void OnInitialDownloadCompleted(object sender,
OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
// Convert the news content into a string
Headlines.Text = GetHeadlinesFromSyndicationStream(e.Result);
// Begin scrolling headlines
StartTicker();
// Start the refresh timer
_timer.Tick += new EventHandler(OnTimerTick);
_timer.Interval = new TimeSpan(0, 5, 0); // 5 minutes
_timer.Start();
}
}
private void OnTimerTick(object sender, EventArgs e)
{
// Launch an async request for current news headlines
WebClient wc = new WebClient();
wc.OpenReadCompleted += new
OpenReadCompletedEventHandler(OnRefreshDownloadCompleted);
wc.OpenReadAsync(_uri);
}
private void OnRefreshDownloadCompleted(object sender,
OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
// Convert the news content into a string and store it away
_text = GetHeadlinesFromSyndicationStream(e.Result);
}
}
...
}
}
每次滚动标题的动画结束时,Storyboard.Completed 事件处理程序都会检查该字段是否有了新的新闻源,如果有,则更新 TextBlock 的内容。然后它将再次启动动画运行。因此,标题会在屏幕上滚动播放,而标题会每五分钟刷新一次。很明显,线程同步逻辑或封送调用不需要返回应用程序的 UI 线程,这是因为 DispatcherTimer.Tick 事件处理程序和 Storyboard.Completed 事件处理程序都是在 UI 线程中执行的。
此方法的弊端是获取和刷新新闻源会导致额外的网络流量。但该流量与视频流自身相比显得微不足道,而且修改现场视频流不需要服务器端添加任何昂贵的硬件或软件。此外,客户端呈现的新闻源可以加入额外的 UX 增强效果,例如鼠标悬停时显示与某个标题有关的附加信息或将标题链接到新闻源的超链接。当提供给用户的内容是 XAML DOM 的一部分而不仅仅是一段视频流时,将可以产生无限多的可能性。
转换和剪辑区域是 XAML 为您提供的众多强大功能中的两种。没有它们,Silverlight 的图形子系统就会缺少很多独特的内容。这些天我收到很多询问有关如何实现一些特殊效果(诸如旋转轮播、Rolodex 样式的分页以及交互图表等)的问题。期待在今后的“超酷代码”中出现更加令人振奋的 Silverlight 图形佳作。
请将您想向 Jeff 询问的问题和提出的意见发送至 wicked@microsoft.com。
Jeff Prosise 是《MSDN 杂志》的特邀编辑,他著有多部书籍,包括《Programming Microsoft .NET》。他还是 Wintellect (www.wintellect.com) 公司的创始人,该公司专门针对 Microsoft .NET 提供软件咨询和培训服务。
Tags:Silverlight 转换 剪辑
编辑录入:爽爽 [复制链接] [打 印]- ››silverlight全屏显示图片
- ››Silverlight MVVM 模式(一) 切近实战
- ››Silverlight for Windows Phone 7开发系列(1):...
- ››Silverlight for Windows Phone 7开发系列(2):...
- ››Silverlight for Windows Phone 7开发系列(3):...
- ››Silverlight for Windows Phone 7开发系列(4):...
- ››Silverlight for Symbian
- ››Silverlight3系列(四)数据绑定 Data Binding 1
- ››转换工具介绍
- ››silverlight2 游戏 1 你能坚持多少秒
- ››Silverlight开发实践--PicZoomShow
- ››Silverlight自定义控件开发 - 令人懊恼的OnApplyT...
更多精彩
赞助商链接