2012-01-06 60 views
0

我創建了一個簡單的WPF應用程序。 在我的XAML我:無法在時鐘驅動的MediaElement上設置源

<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

我遇到了同樣的問題。終於有了解決辦法。這是我實施的解決方案。

要在爲其分配時鐘[使用MediaTimeLine]時設置MediaElement的源代碼,我們應該首先檢查當前線程是否有權訪問MediaElement。這可以通過布爾值 - MediaElement.CheckAccess或MediaElement.Clock.CheckAccess來完成。

0

如錯誤信息所示:如果由時鐘控制(即您的MediaTimeline),則無法設置源MediaElement。您應該將MediaTimeline(僅限)的來源綁定到DataContext中的URI

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> 

而且代碼隱藏

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

這個解決方案爲我工作,並應upvoted。 – Mike 2017-11-25 02:16:29