0

我有一个带有视频缩略图的图像和一个带有真实视频的 MediaElement,如下所示:

<Image Source="{Binding thumbnailurl}"/>
<MediaElement Position="{Binding currenttime}" MediaOpened="MediaElement_Opened" Source="{Binding videourl}" AutoPlay="True" Visibility="Collapsed"/>

在视频的当前时间使用属性更改侦听器:

private TimeSpan _currenttime;
public TimeSpan currenttime
{
    get { return _currenttime; }
    set
    {
        if (_currenttime == value) return;
        _currenttime = value;
        NotifyTimeSpanChanged("timespan");
    }
}

protected void NotifyTimeSpanChanged(string name)
{
    System.ComponentModel.PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        handler(this, new System.ComponentModel.PropertyChangedEventArgs(name));
    }
}

使用此事件处理程序:

private void MyClass_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
    if (e.PropertyName.Equals("timespan"))
    {
        MediaElement me = (MediaElement)sender;

        if (me.Position.Milliseconds > 42)
        {
            me.Visibility = Visibility.Visible; // show video now
        }
    }
}

当视频为 42 毫秒(第一帧)时,我想进行从缩略图到视频的无缝过渡。问题是似乎从来没有发生过时间跨度改变的事件......

4

1 回答 1

1

您可以添加一个属性TimeSpan(我们称之为 CurrentTime)并将PositionMediaElement 的属性绑定到 CurrentTime。

当 CurrentTime 改变时,检查它是否比任意 epsilon“更大”(比如说 42ms,大约是一帧的持续时间)。如果它更大,请使用可见性技巧并停止比较。

于 2013-05-27T21:37:38.893 回答