我正在尝试在Storyboard中使用MediaTimeline和DoubleAnimation来播放带动画的音频。一切都是在C#中实现的,没有XAML。在下面的代码中调用Storyboard.Begin后没有任何反应,也没有抛出任何异常。 mediaElement的HasAudio属性为false,从不调用MediaElement的MediaOpened事件。似乎mediaElement无法加载音频文件。我不知道MediaElement或MediaTimeline是否负责加载音频。没有MediaTimeline,DoubleAnimation工作正常。我在这里缺少什么?
private void SetStoryboard(double beginLeft, double endLeft, TimeSpan duration)
{
mediaElement = new MediaElement();
mediaElement.LoadedBehavior = MediaState.Manual;
mediaElement.ScrubbingEnabled = true;
mediaElement.MediaOpened += new RoutedEventHandler(MediaElement_MediaOpened);
mediaTimeline = new MediaTimeline();
mediaTimeline.Duration = new Duration(duration);
mediaTimeline.Source = new Uri(musicFilePath);
mediaTimeline.FillBehavior = FillBehavior.Stop;
Storyboard.SetTarget(mediaTimeline, mediaElement);
anim = new DoubleAnimation();
anim.From = beginLeft;
anim.To = endLeft;
anim.Duration = new Duration(duration);
anim.FillBehavior = FillBehavior.Stop;
Storyboard.SetTarget(anim, slider);
Storyboard.SetTargetProperty(anim, new PropertyPath(Canvas.LeftProperty));
storyboard = new Storyboard();
storyboard.SlipBehavior = SlipBehavior.Slip;
storyboard.Children.Add(mediaTimeline);
storyboard.Children.Add(anim);
storyboard.Begin(this, true);
}
答案 0 :(得分:0)
您的MediaElement不是VisualTree的一部分。您正在构建它,但由于它未分配给可视树,因此它将永远不会被布局系统使用。
您可以通过将其添加到有效的容器元素中来将其添加到代码隐藏中。 例如
<强> XAML:强>
<Grid x:Name="parentGrid">
<强>代码隐藏:强>
var mediaElement = new MediaElement();
parentGrid.Children.Add(mediaElement);
或者您可以将MediaElement放在页面/窗口上,删除构造MediaElement的行(.. = new MediaElement),然后通过代码隐藏访问它:
<强> XAML:强>
<MediaElement x:Name="mediaElement" Width="200" Height="100"/>