我正在编写一个小型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)似乎仍在调试但没有任何反应。
知道我在这里做错了吗?关于如何实现此功能的任何提示都不同?
我非常感谢你的建议!
答案 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;