【发布时间】:2011-11-18 19:09:03
【问题描述】:
如何使用 Caliburn Micro 在 Silverlight 中播放 MP3?
MediaElement 的“play()”方法需要根据 ViewModel 中的布尔变量执行。
提前致谢!
【问题讨论】:
标签: audio silverlight-4.0 mvvm mediaelement caliburn.micro
如何使用 Caliburn Micro 在 Silverlight 中播放 MP3?
MediaElement 的“play()”方法需要根据 ViewModel 中的布尔变量执行。
提前致谢!
【问题讨论】:
标签: audio silverlight-4.0 mvvm mediaelement caliburn.micro
使用 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;
}
}
}
【讨论】: