我创建了一个简单的WPF应用。 在我的XAML中,我有:
<StackPanel Orientation="Horizontal">
<MediaElement x:Name="media" Width="200" Height="200" Source="D:\Wpf project\wpfSampleApp\wpfSampleApp\Wildlife.wmv">
<MediaElement.Triggers>
<EventTrigger RoutedEvent="MediaElement.Loaded" SourceName="media">
<EventTrigger.Actions>
<BeginStoryboard Name= "myBegin">
<Storyboard SlipBehavior="Slip">
<MediaTimeline Source="{Binding Source,ElementName=media,Mode=OneWay}" Storyboard.TargetName="media"
BeginTime="0:0:0" Duration="0:10:59" RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</MediaElement.Triggers>
</MediaElement>
<Button x:Name="btnnext" Content="Next" Width="100" Height="30" Click="btnnext_Click"/>
</StackPanel>
在XAML.cs文件中,点击下一个按钮我必须播放下一个视频:
media.Source = new Uri(@"D:\\Wpf project\\wpfSampleApp\\wpfSampleApp\\B.wmv");
media.Play();
相反,我面临一个错误,上面写着“无法在时钟驱动的MediaElement上设置源代码”。
请帮我解决这个异常,我更喜欢修改XAML,而不是在XAML.cs文件中编写代码。
任何帮助将不胜感激,谢谢
答案 0 :(得分:1)
派对已经很晚了,但是如果有人需要类似的东西,我发现了一个不是MVVM模式的解决方案,但对于这种情况,它应该是可以原谅的。
Xaml部分
<MediaElement Name="Player">
<MediaElement.Triggers>
<EventTrigger RoutedEvent="MediaElement.Loaded">
<EventTrigger.Actions>
<Storyboard Name="MediaBoard">
<MediaTimeline Source="path" Storyboard.TargetName="Player" RepeatBehavior="Forever"/>
</Storyboard>
</EventTrigger.Actions>
</EventTrigger>
</MediaElement.Triggers>
</MediaElement>
和CodeBehind
private void ChangeLoopedVideo(Uri url)
{
MediaTimeline timeline = new MediaTimeline(url);
timeline.RepeatBehavior = RepeatBehavior.Forever;
Storyboard.SetTarget(timeline, Player);
MediaBoard.Children.Clear();
MediaBoard.Children.Add(timeline);
MediaBoard.Begin();
}
答案 1 :(得分:0)
我遇到了同样的问题。终于得到了解决方案。这是我实施的解决方案。
要为MediaElement设置Source,同时为它分配Clock [使用MediaTimeLine],我们应首先检查当前线程是否可以访问MediaElement。这可以通过布尔值完成 - MediaElement.CheckAccess或MediaElement.Clock.CheckAccess。
答案 2 :(得分:0)
正如错误消息所示:如果MediaElement
由时钟(即您的MediaTimeline
)控制,则无法设置MediaTimeline
的来源。您应该将URI
(仅限)的来源绑定到DataContext
中的{{1}}。