2009-10-30 5 views
1

c'est un problème connu avec ItemsControl bien que je ne pouvais pas trouver une solution :(.obtenir une référence à un MediaElement dans un ItemsControl (WPF)

XAML

<ItemsControl x:Name="myItemsControl" ItemsSource ="{Binding videos}" Grid.ColumnSpan="2"> 
     <ItemsControl.Resources> 
      <DataTemplate x:Name="myDataTemplate" DataType="{x:Type sys:String}"> 
       <Grid x:Name="sp" Width="300" Height="200"> 
        <MediaElement x:Name="myvideo" Loaded="myvideo_Loaded" UnloadedBehavior="Stop" ScrubbingEnabled="True" Stretch="Fill" Source="{Binding}" LoadedBehavior= "Play"> 
        </MediaElement> 
       </Grid> 
      </DataTemplate> 
      </ItemsControl.Resources> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <mt:TouchablePanel/> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
    </ItemsControl> 

</Grid> 

si dans le code derrière je veux faire quelque chose comme

private void myvideo_Loaded(object sender, RoutedEventArgs e) 
{ 
    //myvideo.Play(); 
    // myvideo.Pause(); 
} 

Je l'ai commenté pour être en mesure de compiler. Peut-être vous obtiendrez de meilleurs

grâce à l'avance

Répondre

1

Dans le gestionnaire d'événements, vous pouvez accéder au MediaElement via le paramètre sender

private void myvideo_Loaded(object sender, RoutedEventArgs e) 
{ 
    MediaElement myVideo = sender as MediaElement; 
    if (myVideo != null) 
    { 
     myvideo.Play(); 
    } 
} 

Si vous souhaitez accéder au MediaElement un élément spécifique dans le ItemsControl, vous pouvez utiliser le ItemContainerGenerator:

MediaElement myVideo = null; 
FrameworkElement container = myItemsControl.ItemContainerGenerator.ContainerFromItem(someItem) as FrameworkElement; 
if (container != null) 
{ 
    // Note: this works for an ItemsControl, not for a ListBox or ListView... 
    ContentPresenter presenter = container as ContentPresenter; 
    if (presenter != null) 
    { 
     myVideo = presenter.ContentTemplate.FindName(myVideo) 
    } 
} 
+0

Merci, c'est tout. – Mrme

0

réponse ici, mais sinon, vous pouvez toujours envelopper votre contrôle MediaElement dans UserControl. Dans le contrôle utilisateur, vous vous abonnez à tous les événements dont vous avez besoin, puis utilisez le contrôle utilisateur dans le modèle de données.

:) J'espère que cela aide.

Questions connexes