XAML中的媒体元素源未更改

时间:2014-07-17 16:17:39

标签: c# wpf xaml

我正在尝试在WPF中构建媒体播放器。有一个媒体播放器和几个按钮。播放器的源最初设置为特定视频。单击每个按钮需要将媒体播放器的源更改为不同的URI。 第一个视频播放正确,但按钮点击似乎不会改变媒体播放器的来源。我检查了可能的解决方案和SO,但我似乎没有注意到任何不同。我可能已经错过了一些基本的东西,因为我是WPF的新手。

我的代码如下:

<MediaElement Source="C:\video\a.mpg" Name="myMediaElement" HorizontalAlignment="Left" Height="208" Margin="10,10,0,0" VerticalAlignment="Top" Width="252" LoadedBehavior="Manual" UnloadedBehavior="Manual" Stretch="Fill"      MediaOpened="Element_MediaOpened" MediaEnded="Element_MediaEnded"/>

这是初始化媒体元素的方式

这就是我试图改变消息来源的方式:

  private void ChangeMedia(object sender, MouseButtonEventArgs args)
  {
     MessageBox.Show("Media to be changed");// This is called and a message box pops up showing this message.
     myMediaElement.Source = new System.Uri("C:\video\b.mpg");
     MessageBox.Show("Media changed successfully"); // never gets called and message box does not pop up 
  }

请告诉我出错的地方

2 个答案:

答案 0 :(得分:0)

删除XAML中的硬编码源,并在创建URI时指定路径是绝对的

XAML:

<MediaElement x:Name="myMediaElement" HorizontalAlignment="Left" Height="208" Margin="10,10,0,0" VerticalAlignment="Top" Width="252" LoadedBehavior="Manual" UnloadedBehavior="Manual" Stretch="Fill" MediaOpened="Element_MediaOpened" MediaEnded="Element_MediaEnded"/>

代码隐藏:

public MyWindow()
{
    InitializeComponent();
    myMediaElement.Source = new Uri(@"C:\video\a.mpg", UriKind.Absolute);
}

private void ChangeMedia(object sender, MouseButtonEventArgs args)
{
    MessageBox.Show("Media to be changed");// This is called and a message box pops up showing this message.
    myMediaElement.Source = new Uri(@"C:\video\b.mpg", UriKind.Absolute);
    MessageBox.Show("Media changed successfully"); // never gets called and message box does not pop up 
}

另请注意,路径需要正确转义反斜杠。您可以对整个字符串使用@,也可以为每个斜杠使用\\

答案 1 :(得分:0)

在我尝试了d.moncada所说的之后,我的应用程序开始崩溃了。我附上了我的调试器并发现它崩溃了路径的设置位置。

   myMediaElement.Source = new Uri("C:\video\a.mpg", UriKind.Absolute); //It crashed here

这是错误消息:

Additional information: Invalid URI: A Dos path must be rooted, for example, 'c:/'.

我在Google上搜索了很多,但似乎没有解决我的问题。然后我想如果转义序列等可能有任何问题 我只是在路径中尝试使用双斜线而不是单斜线,它就像魔法一样!

 myMediaElement.Source = new Uri("C:\\video\\a.mpg", UriKind.Absolute); //It worked!!

我不知道背后的确切原因,但确实解决了我的问题。