【问题标题】:Media element source not changing in XAMLXAML 中的媒体元素源未更改
【发布时间】:2014-07-17 16:17:38
【问题描述】:

我正在尝试在 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 
  }

请告诉我哪里出错了

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    在我尝试了 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!!
    

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

    【讨论】:

    • 啊对了,你也可以用@。我也会更新我的答案
    【解决方案2】:

    移除 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.mocada 的回答。我尝试了您的解决方案,但它对我不起作用。但它确实帮助我实现了我想要的。路径有问题。我将在下面发布我的解决方案,并解释您的解决方案如何帮助我实现它。
    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多