如何更新MediaElement的Source属性并在Silverlight 3.0中开始播放

时间:2009-09-24 13:40:42

标签: silverlight

我正在编写一个小型Silverlight媒体播放器应用程序。在页面顶部,我有一个包含listboxitems的水平列表框。列表框绑定到包含我创建的名为ContentItem的对象的数据源。 ContentItem的定义如下:

public class ContentItem
    {
        public string CoverUrl { get; set; }
        public string ResourceUrl { get; set; }

        public ContentItem()
        {
        }

    }

我还有一个Media元素:

<MediaElement x:Name="MediaBox" Source="http://localhost/repository/FighterPilot.wmv" Stretch="Fill"/>

所以我的观点是,当用户从列表框中选择一个新的ContentItem时,我想要更改MediaElement的源并开始播放新的ContentItem。为此,我使用了ListBox SelectionChange事件: private void CoverFlowList_SelectionChanged(object sender,

System.Windows.Controls.SelectionChangedEventArgs e)
        {
            MediaBox.Stop();
            ListBoxItem SelectedItem = (ListBoxItem)sender;
            ContentItem SelectedContent = (ContentItem)SelectedItem.Content;
            MediaBox.Source = new Uri(SelectedContent.ResourceUrl);
            MediaBox.Play();
        }

但这不想工作。当我调试代码时,我可以一步步到ListBoxItem SelectedItem = (ListBoxItem)sender; 但在这条线上它们都冻结了。 webbrowser显示一个空白页面,调试器(Visual Studio 2008)似乎仍在调试但没有任何反应。

知道我在这里做错了吗?关于如何实现此功能的任何提示都不同?

我非常感谢你的建议!

2 个答案:

答案 0 :(得分:1)

错误发生在我的类型转换中。改变

ListBoxItem SelectedItem = (ListBoxItem)sender;
ContentItem SelectedContent = (ContentItem)SelectedItem.Content;

ContentItem SelectedItem = (ContentItem)((ListBox)sender).SelectedItem;

解决了它。所以明显的错误是ListBoxItem不是发送者,因为ListBox ofcourse是发送者。

感谢所有浪费宝贵时间试图纠正我草率的书面代码的人。

答案 1 :(得分:0)

我做了什么:

Uri SomeVariable = new Uri("Devil May Cry - Shall Never Surrender", UriKind.RelativeOrAvsolute);
MyPlayer.Source = SomeVariable;