2012-01-06 6 views
0

私は単純なWPFアプリケーションを1つ作成しました。私は私の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.csファイルにコードを記述するのではなく、XAMLを変更することをお勧めします。

すべてのヘルプは、私は同じ問題に会ったおかげ

答えて

0

を理解されるであろう。最後に解決策を得ました。ここに私が実装したソリューションがあります。

[MediaTimeLineを使用して] Clockが割り当てられているときにMediaElementのソースを設定するには、まず現在のスレッドがMediaElementにアクセスできるかどうかを確認する必要があります。これは、ブール値(MediaElement.CheckAccessまたはMediaElement.Clock.CheckAccess)で行うことができます。

0

エラーメッセージには、のソースがクロック(つまり、MediaTimeline)によって制御されている場合、ソースを設定できないことが記載されています。 MediaTimeline(唯一)のソースをDataContextURIにバインドする必要があります。

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

関連する問題