1

这是 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();
}

我将其注释掉以便能够编译。

4

2 回答 2

1

在事件处理程序中,可以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)
    }
}
于 2009-10-30T10:32:55.637 回答
0

也许你会在这里得到更好的答案,但如果没有,你总是可以将你的 MediaElement 控件包装到 UserControl 中。在用户控件中订阅您需要的所有事件,然后在数据模板中使用用户控件。

:) 希望这可以帮助。

于 2009-10-30T10:19:05.197 回答