[英]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.