[英]Media element source not changing in 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
}
请让我知道我要去哪里了
删除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
}
另外请注意,路径必须正确转义反斜杠。 您可以在整个字符串上使用@
,也可以在每个斜杠上使用\\\\
。
在尝试了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!!
我不知道背后的确切原因,但确实解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.