【问题标题】:Playing a sound in Silverlight with MediaElement and Caliburn Micro使用 MediaElement 和 Caliburn Micro 在 Silverlight 中播放声音
【发布时间】:2011-11-18 19:09:03
【问题描述】:

如何使用 Caliburn Micro 在 Silverlight 中播放 MP3?

MediaElement 的“play()”方法需要根据 ViewModel 中的布尔变量执行。

提前致谢!

【问题讨论】:

    标签: audio silverlight-4.0 mvvm mediaelement caliburn.micro


    【解决方案1】:

    使用 IResult。 sample code 编辑:基于布尔值,如果您描述这种情况,我可以更改示例。

    查看:

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

    视图模型:

    public class MediaViewModel : Screen
        {
            public MediaViewModel()
            {
                DisplayName = "Media Sample";
            }
    
            public IEnumerable<IResult> Play()
            {
                var result = new PlayMediaResult();
                yield return result;
            }
        }
    

    播放媒体结果:

     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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      相关资源
      最近更新 更多