получение ссылки на MediaElement внутри ItemsControl (WPF) - PullRequest
1 голос
/ 30 октября 2009

это известная проблема с ItemsControl, хотя я не смог найти решение :(.

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>

так что за кодом я хочу сделать что-то вроде

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

Я прокомментировал это, чтобы иметь возможность компилировать.

заранее спасибо

Ответы [ 2 ]

1 голос
/ 30 октября 2009

В обработчике событий вы можете получить доступ к MediaElement через параметр sender

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

Если вы хотите получить доступ к MediaElement для определенного элемента в ItemsControl, вы можете использовать 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 голосов
/ 30 октября 2009

Может быть, вы получите лучший ответ здесь, но если нет, вы всегда можете поместить свой элемент управления MediaElement в UserControl. В пользовательском элементе управления вы подписываетесь на все необходимые вам события, а затем используете пользовательский элемент управления в шаблоне данных.

:) Надеюсь, это поможет.

...