Wpf 无法在由时钟驱动的MediaElement上设置源

Wpf 无法在由时钟驱动的MediaElement上设置源,wpf,mediaelement,Wpf,Mediaelement,我已经创建了一个简单的WPF应用程序。 在我的XAML中,我有: <StackPanel Orientation="Horizontal"> <MediaElement x:Name="media" Width="200" Height="200" Source="D:\Wpf project\wpfSampleApp\wpfSampleApp\Wildlife.wmv"> <MediaElement.Triggers>

我已经创建了一个简单的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>
相反,我面临的错误是“无法在时钟驱动的MediaElement上设置源”

请帮助我克服这个异常,我更喜欢修改XAML,而不是在XAML.cs文件中编写代码


任何帮助都将不胜感激,谢谢

我遇到了同样的问题。终于找到了解决办法。这是我实现的解决方案


要在时钟分配给MediaElement时设置MediaElement的源[使用MediaTimeLine],我们应该首先检查当前线程是否有权访问MediaElement。这可以通过布尔值-MediaElement.CheckAccess或MediaElement.Clock.CheckAccess来实现。

我遇到了同样的问题。终于找到了解决办法。这是我实现的解决方案


要在时钟分配给MediaElement时设置MediaElement的源[使用MediaTimeLine],我们应该首先检查当前线程是否有权访问MediaElement。这可以通过布尔值-MediaElement.CheckAccess或MediaElement.Clock.CheckAccess来完成。正如错误消息所说:如果MediaElement由时钟控制(即,
MediaTimeline
),则无法设置其源。您应该将
MediaTimeline
(仅)的源绑定到
DataContext

中的
URI
,如错误消息所示:如果
MediaElement
由时钟控制(即
MediaTimeline
),则无法设置其源。您应该将
MediaTimeline
(仅)的源绑定到
DataContext
中的
URI
,派对已经很晚了,但是如果有人需要类似的东西,我发现一个解决方案不是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>

派对已经很晚了,但是如果有人需要类似的东西,我发现一个解决方案不是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>
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();
}