Воспроизведение звука в Silverlight с помощью MediaElement и Caliburn Micro - PullRequest
3 голосов
/ 16 сентября 2011

Как воспроизвести MP3 в Silverlight с помощью Caliburn Micro?

Метод «play ()» MediaElement должен выполняться на основе логической переменной в ViewModel.

Спасибо зазаранее!

1 Ответ

4 голосов
/ 17 сентября 2011

Используйте IResult. образец кода Изменить: на основе логического значения, если вы опишите сценарий этого, я могу изменить образец.

Вид:

<Grid>
        <MediaElement AutoPlay="False"
                      Source="../Assests/Kalimba.mp3"></MediaElement>
        <Button x:Name="Play"
                Content="Play"
                Height="50"
                Width="150" />
    </Grid>

ViewModel:

public class MediaViewModel : Screen
    {
        public MediaViewModel()
        {
            DisplayName = "Media Sample";
        }

        public IEnumerable<IResult> Play()
        {
            var result = new PlayMediaResult();
            yield return result;
        }
    }

PlayMediaResult:

 public class PlayMediaResult : IResult
    {
        public void Execute(ActionExecutionContext context)
        {
            var view = context.View as FrameworkElement;
            var mediaElement = FindVisualChild<MediaElement>(view);

            if (mediaElement != null)
            {
                mediaElement.Play();
                Completed(this, new ResultCompletionEventArgs {});
            }

            Completed(this, new ResultCompletionEventArgs {});
        }

        public event EventHandler<ResultCompletionEventArgs> Completed;

        public static TChildItem FindVisualChild<TChildItem>(DependencyObject obj)
            where TChildItem : DependencyObject
        {
            for (var i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                var child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is TChildItem)
                    return (TChildItem) child;

                var childOfChild = FindVisualChild<TChildItem>(child);
                if (childOfChild != null)
                    return childOfChild;
            }
            return null;
        }
    }
}
...