我有一个带有视频缩略图的图像和带有真实视频的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
}
}
}
当视频处于42ms(第一帧)时,我希望从缩略图转换为视频。问题是,似乎永远不会发生一个时间跨度改变的事件......
答案 0 :(得分:1)
您可以添加TimeSpan
属性(我们称之为CurrentTime)并将MediaElement的Position
属性绑定到CurrentTime。
当CurrentTime改变时,检查它是否比任意epsilon“更大”(假设42ms,大约是一帧的持续时间)。如果它更大,那就做可见性技巧并停止比较。