Невозможно установить источник на MediaElement, управляемый часами - PullRequest
1 голос
/ 06 января 2012

Я создал одно простое приложение 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.

Любая помощь будет оценена, спасибо

Ответы [ 3 ]

1 голос
/ 01 августа 2016

Уже очень поздно для вечеринки, но если кому-то нужно что-то подобное, я нашел решение не в шаблоне MVVM, но в этом случае это должно быть простительно.

Xaml part

<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();
}
0 голосов
/ 19 января 2015

Как говорится в сообщении об ошибке: вы не можете установить источник MediaElement, если он управляется часами (т. Е. Вашими MediaTimeline).Вы должны связать источник MediaTimeline (только) с URI в вашем DataContext.

0 голосов
/ 23 марта 2012

Я встречался с той же проблемой. Наконец-то есть решение. Вот решение, которое я реализовал.

Чтобы установить источник для MediaElement, когда для него назначены часы [с использованием MediaTimeLine], мы должны сначала проверить, имеет ли текущий поток доступ к MediaElement. Это можно сделать с помощью логических значений - MediaElement.CheckAccess или MediaElement.Clock.CheckAccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...