C#gif medialement如何改变位置

我只是想在MediaElement更改gif的位置,所以当我不用鼠标hover它时,它应该显示GIF的某个图像(所选位置),当我将光标移动到MediaElement ,GIF应该从零位开始比赛。 但我根本无法改变GIF的位置。

它开始播放,我可以暂停,但设置位置和stop()方法根本没有影响。


XAML代码:

  

基本代码:

 public UserWindow() { InitializeComponent(); } private void mediaElement_Loaded(object sender, RoutedEventArgs e) { mediaElement.Play(); mediaElement.Position = TimeSpan.FromMilliseconds(100); mediaElement.Pause(); } private void mediaElement_MouseEnter(object sender, MouseEventArgs e) { mediaElement.Play(); mediaElement.Position = TimeSpan.Zero; } private void mediaElement_MouseLeave(object sender, MouseEventArgs e) { mediaElement.Position = TimeSpan.FromMilliseconds(100); mediaElement.Pause(); } 

MediaElement需要发挥作用才能改变位置?


变化:正如我所建议的那样:

 MediaFailed="mediaElement_MediaFailed" 

然后:

  private void mediaElement_MediaFailed(object sender, ExceptionRoutedEventArgs e) { MessageBox.Show("failed"); } 

但它没有出现,我不知道该怎么做。 然后gif工作正常或可能导致这种情况吗? 我是否需要以特殊方式下载GIF以确保它支持正常function? 我尝试了不同的GIF,它仍然无法正常工作。

令人惊讶的是,互联网上还没有人报告这一点,很多人都说这是有效的,但实际上不可能改变在MediaElement中运行的gif的位置。 正常的方法在我的问题上面,例如适用于* .mp4,但不适用于GIF。 为了说服您轻松尝试在Windows Media Player中播放GIF。 由于MediaElement非常薄,包裹在Windows Media Player中,您将看到相同的结果,更改位置被禁用。

有一种非常难看的方法如何重置gif从一开始就玩它,但如果你有其他选择,我不建议使用它。 这可以应用于任何事件/触发器。

 private void mediaElement_MediaEnded(object sender, RoutedEventArgs e) { if (mediaElement.Source.ToString() == "file:///C:/temp/newGif1.gif") { mediaElement.Source = new Uri("C:\\temp\\newGif.gif"); mediaElement.Play(); } else { mediaElement.Source = new Uri("C:\\temp\\newGif1.gif"); mediaElement.Play(); } } 

唯一的方法是重置源以从头开始gif,但是你需要gif的副本,因为如果它是相同的源,则MediaElement不会更新源。 在generell中设置MediaElement的源时,您必须设置完整路径。 在XAML中,您可以从PC上的任何位置选择gif,不需要将其设置为项目中的资源。

但是在普通代码中设置源代码需要将gif设置为项目中的资源。 所以通常情况下它不像示例中那样,而是像C:\Users\UnknownUser\Documents\Visual Studio 2015\Projects\RandomTestProject\Ressources

如果您不依赖于使用GIF,我建议您使用* .mp4,因为它更易于处理并按预期方式工作,您可以将* .gif转换为* .mp4。