立即动手尝试-使用Silverlight Media Framework构建自定义播放器(12)

2012-04-09
浏览
导读:mediaElement_MediaEnded 方法会创建一个 SMFPlayerTestDataClient 类型的实例,为 FetchCompleted 事件指定另一个事件处理程序,然后调用 Fetch 开始下载过程。通过调用以前在 OnRequestCompleted 中实现的 OnFetc

mediaElement_MediaEnded 方法会创建一个 SMFPlayerTestDataClient 类型的实例,为 FetchCompleted 事件指定另一个事件处理程序,然后调用 Fetch 开始下载过程。通过调用以前在 OnRequestCompleted 中实现的 OnFetchCompleted(内容下载完成后由 DataClient 基类调用),将会调 用 FetchCompleted 处理程序。

实现在 mediaElement_MediaEnded 中注册的 suggestion_FetchCompleted,会获取强类型的 Suggestion 数据数组,并为每个按钮指定一个 Suggestion:

void m_client_FetchCompleted(
  object sender, SimpleEventArgs<
  SMFPlayerTestSuggestion[]> e) {
  for (int c = 1; c <= 3; c++) {
   Button btn = (Button)GetTemplateChild(
    "Button" + c.ToString());
   btn.Tag = e.Result[c - 1].Url;
   btn.Content =
    e.Result[c - 1].DisplayName;
  }
}

底层 FrameworkElement 类型上的方法 GetTemplateChild,可以引用 MainPage XAML 中定义的每个 按钮。对于每个按钮,将为 Content 属性指定显示文本,并为 Tag 属性指定 URI。然后,每个按钮的单 击事件处理程序可以从 Tag 属性中拖出 URI 并将 URL 指定给播放器的 MediaElement 以播放流媒体:

private void Button1_Click(
  object sender, System.Windows.RoutedEventArgs e) {

  Uri redirectUrl = (Uri)((Button)sender).Tag;
  myPlayer.MediaElement.SmoothStreamingSource =
   redirectUrl;
}

显示按钮

最后一步是隐藏按钮,直到当前进行流式处理的视频完成,这时按钮将变为可见。当用户单击某个按 钮时,这些按钮会再次隐藏起来。

在 Visual Studio 中,可以通过为 SMFPlayer 类添加两个 TemplateVisualState 属性来对其进行编 辑:

[TemplateVisualState(Name = "Hide", GroupName = "SuggestionStates")]
[TemplateVisualState(Name = "Show", GroupName = "SuggestionStates")]
public class SMFPlayer : Player

TemplateVisualState 是一个特别强大的属性,可以定义对象处于可视状态。当可视状态变得有效时 ,Silverlight 将更新属于指定类的可视元素的属性,如子按钮控件的可视性。

要设置当前的可视状态,请使用 VisualStateManager 类的静态 GoToState 方法(本机 Silverlight 类型)。TemplateVisualState 的 GroupName 属性喜欢组合状态,TemplateVisualState 的 Name 属性 则会指定各个状态。

返回 Expression Blend。在 myPlayer 模板中,单击设计器窗口正上方的 myPlayer,然后单击“编 辑模板”|“编辑当前值”。单击“状态”选项卡,并向下滚动 SuggestionStates,如图 9 所示。

图 9 SuggestionStates 的可视状态

Silverlight编程模型、XAML和HTML DOM

Silverlight对象树

Silverlight中如何为浏览器外应用程序实现

Silverlight中如何为浏览器外支持配置应用

使用LINQ和ADO.NET创建Silverlight程序