Связывание источника в MediaTimeline - PullRequest
0 голосов
/ 21 декабря 2010

Я пытаюсь привязать медиа-таймлайн к Uri следующим образом:

<UserControl.Resources>
    <Storyboard x:Key="myStoryboard">
        <MediaTimeline Storyboard.TargetName="myMediaPlayer"
                       Source="{Binding MediaSource}"
                       RepeatBehavior="Forever" />
    </Storyboard>
</UserControl.Resources>

<UserControl.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
        <BeginStoryboard Storyboard="{StaticResource myStoryboard}" />
    </EventTrigger>
</UserControl.Triggers>

<Grid>
    <MediaElement x:Name="mymediaPlayer" />
</Grid>

Однако, когда я делаю это, он говорит, что мне нужно «Должен указать URI»Исключение диспетчера.В viewmodel у меня есть свойство вроде:

    public Uri MediaSource
    {
        get { return _mediaSource; }
        set
        {
            if (_oscilloscopeSource != value)
            {
                _mediaSource= value;
                OnPropertyChanged("MediaSource");
            }
        }
    }

Кажется, что при загрузке медиаплеера он не считывает источник из привязки.Что дает?

В конструкторе у меня есть:

_mediaSource = new Uri(@"C:\someMovie.mov", UriKind.Absolute);

Спасибо.

1 Ответ

4 голосов
/ 21 декабря 2010

Обновление
Не могу заставить это работать, поэтому стрельба в темноте сейчас.Имеет ли значение перемещение триггера в MediaElement?

<MediaElement x:Name="myMediaPlayer">
    <MediaElement.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <BeginStoryboard Storyboard="{StaticResource myStoryboard}" />
        </EventTrigger>
    </MediaElement.Triggers>
</MediaElement>

Я опробовал это, и оно работает для меня.Возможные причины, о которых я могу подумать.

  • У вас установлен DataContext для UserControl?
  • Установка _mediaSource напрямую не вызовет OnPropertyChanged, поскольку вы не устанавливаете свойство CLR.Вместо этого установите MediaSource.
  • Ваш MediaElement называется mymediaPlayer, а не myMediaPlayer в качестве TargetName.(Опечатка?)

За исключением имени MediaElement, которое я изменил, мой рабочий xaml идентичен вашему.Это мой полный код файла

public partial class UserControl1 : UserControl, INotifyPropertyChanged
{
    public UserControl1()
    {
        InitializeComponent();
        MediaSource = new Uri("C:\\C1.MOV");
        this.DataContext = this;
    }

    private Uri _mediaSource;
    public Uri MediaSource
    {
        get
        {
            return _mediaSource;
        }
        set
        {
            _mediaSource = value;
            OnPropertyChanged("MediaSource");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
...