前言
Silverlight 在多媒體的處理中提供了 MediaElement 這個控制項,可以進行影片的播放、聲音的播放等應用。而串流資訊的來源可以是一個網址列,也可以是一個串流來源。但是若來源固定的話這個應用實在很弱,因此大多的時候來源都是可以隨時變動的。今天在做一些測試的時候有個情境是這樣的: 使用者在 ListBox 中選了一個 Item,而選中後會觸發事件讓 MediaElement 的 Source 重新設定來源,然後就可以直接播放新的 Item 的內容 (不同的 Item 表示不同的 Radio 位址)。
問題描述
點選 Listbox 的 Item 後會觸發事件,但是程式執行 MediaElement1.Play() 後卻沒有動作。
分析
根據 MSDN 的官方文件中說明,MediaElement 的 Source 在進行變更之後會針對來源進行驗證或是授權(如果有需要的話),接著就會觸發 MediaOpened 事件,不過接著會進行什麼動作則是依據兩個屬性來決定;AutoPlay, CanPause。
Case 1: 若 AutoPlay 是 True。則MediaElement的Source更改後狀態直接進入 Playing 來播放多媒體。
Case 2: 若 AutoPlay 是 False,CanPause 是 True。則Source更改後狀態會進入 Pause。
Case 3: 若兩個屬性都是 False。則 Source 更改後狀態會進入 Stopped。
因此,若想要使用者點選選單然後立刻播放Radio的話可以這麼做:
Solution
- Solution1: xaml 文件中宣告 MediaElement 與這些屬性
|
|
code-behind檔中這樣寫
|
|
- Solution2: xaml 文件中 MediaElement 改成這樣:
|
|
code-behind 檔要多處理一個 MediaOpened 事件
|
|