Wpf Custom Media элемент - PullRequest
       15

Wpf Custom Media элемент

0 голосов
/ 19 декабря 2009

Эй, ребята, я довольно зеленый, когда дело доходит до wpf, поэтому мне нужна небольшая помощь, вот что я собираюсь сделать.

Я хочу создать пользовательский медиа-элемент, я хочу иметь возможность загружать видео и воспроизводить в любом месте от 15 секунд до 1 минуты видео, я хочу иметь возможность динамически устанавливать его при загрузке в зависимости от пользователя настройки. Я загружаю тонны видео по существу в элемент управления представлением списка, и я хочу, чтобы видео воспроизводилось, но я пытаюсь сэкономить ресурсы, воспроизводя только небольшой предварительный просмотр видео.

Вещи, которые я изучил

  • пользовательский контроль - немного потерян
  • подклассы
  • управление до сборки

Я просто не уверен, куда идти дальше. Я бы очень признателен за любую помощь, которую вы можете мне дать.

1 Ответ

1 голос
/ 19 декабря 2009

Учитывая ваши комментарии, расширяющие требование, я бы посоветовал вам использовать обычный MediaElement, но назначить ему «предварительную» версию видео, которая включает только фрагмент, который вы хотите показать, и имеет уменьшенное разрешение, чтобы сохранить загрузить след вниз.

Таким образом, ваша модель будет иметь два свойства, скажем PreviewUri и SourceUri. В PreviewUri вы сохраняете «предварительную» версию видео; в SourceUri вы храните «полную» версию. В вашем ListBox или ItemsControl вы будете использовать MediaElements, привязанные к PreviewUri. Когда пользователь делает выбор, вы устанавливаете Source из основного MediaElement в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...