Wpf Custom Media元素

时间:2009-12-19 00:37:45

标签: c# .net wpf mediaelement

嘿伙计们,对于wpf我是相当绿的,所以我需要一些帮助,这就是我想做的事情。

我想创建一个自定义媒体元素,我希望能够加载视频并播放从视频15秒到1分钟的任何位置,我希望能够根据用户在加载时动态设置它设置。我将大量视频基本上加载到列表视图控件中,我想要播放视频,但我只是通过播放视频的小预览来节省资源。

我调查过的事情

  • 自定义控制 - 有点丢失
  • 子类
  • 预构建控制

我真的不确定下一步该去哪儿。我会非常感谢你能给我的任何帮助。

1 个答案:

答案 0 :(得分:1)

鉴于您的评论扩展了要求,我建议您使用普通的MediaElement,但为其分配一个视频的“预览”版本,该版本仅包含您要显示的片段并且分辨率降低以便保持负载足迹下降。

因此,您的模型将具有两个属性,例如PreviewUri和SourceUri。在PreviewUri,您存储视频的“预览”版本;在SourceUri,您存储“完整”版本。在ListBox或ItemsControl中,您将使用绑定到PreviewUri的MediaElements。当用户进行选择时,您将主MediaElement的Source设置为SourceUri。所以你的ListBox看起来像这样:

<ListBox ItemsSource="{Binding}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <MediaElement Source="{Binding PreviewUri}" />
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

你的模型看起来像这样:

public class Video  // ideally implement INotifyPropertyChanged - not shown
{
  public Uri PreviewUri { get; set; }
  public Uri SourceUri { get; set; }

  public static ObservableCollection<Video> LoadVideoInfo()
  {
    /* pseudocode
    new up a collection
    foreach (file in videoFolder)
      collection.Add(new Video { PreviewUri = smallFileUri, SourceUri = bigFileUri });
    return collection;
    */
  }
}

你的代码看起来像这样:

DataContext = Video.LoadVideoInfo();

如何显示完整尺寸的视频取决于您要触发的内容以及全尺寸视频的显示位置。使用ListBox而不是循环并将子项添加到StackPanel可能有助于此,因为您可以使用SelectedItemChanged事件,数据绑定到SelectedItem或使用IsSynchronizedWithCurrentItem属性。