我正在从头开始为我的应用构建媒体播放器。为了从“常规”视图转到全屏,播放器将从我的XAML的一部分中删除并插入另一部分 - 如下所示:
if (Trailer.IsFullScreen())
{
// some code here
var mediaPlayer = Trailer; // Trailer is the media player usercontrol
TrailerFullScreenGrid.Children.Remove(Trailer);
TrailerWrapper.Children.Add(mediaPlayer);
// more code here
}
else
{
// some code here
var mediaPlayer = Trailer;
TrailerWrapper.Children.Remove(Trailer);
TrailerFullScreenGrid.Children.Add(mediaPlayer);
// more code here
}
现在,当我执行此操作时,视频无法继续播放,如果单击播放按钮,则会重新启动整个剪辑。我想要的是暂停电影,做我所有的xaml魔术,然后从暂停时继续播放。我已经阅读了有关UnloadedBehaviour的内容,但在Windows 8 RTM中似乎不太可能。
任何帮助将不胜感激!
答案 0 :(得分:2)
某些视觉元素必须保留在可视树中才能正常工作,尤其是必须使用媒体播放或捕获的元素。我从来没有尝试过你正在做的事情,但这并不让我感到惊讶,这就是行为。
我想你可以捕获播放位置,并在重新设置控件并再次开始播放后尝试设置它,但这是很多工作并且可能容易出错。说实话,Windows开发人员打算让您处理这种情况的方式是使用Visual States。
如果您在Expression Blend中使用 LayoutAwarePage ,则可能会遇到过Visual States。 LayoutAwarePage 具有Windows 8中所有不同视图模式的状态(填充,捕捉,完整风景,全肖像)。但即使您不使用 LayoutAwarePage ,也可以随时创建自己的状态。您可以在混合中的状态选项卡上创建状态(窗口 - >状态,如果您没有看到该窗口)。
每个州必须居住在州群组。组名无关紧要,只要了解组中的每个州都是独占的。因此,您可以将您的论坛称为 MediaPlaybackStates ,并在该组内部放置两个名为 Windowed 和 FullScreen 的状态。
您已经定义了两种状态,您可以使用Blend来设计它们。您只需选择状态并更改所需的任何属性即可。然后在运行时,当您告诉框架进入该状态时,它会回放您的“记录”更改,甚至可以为您设置动画。
当然,一个问题是您无法使用Visual State更改控件的父级。相反,请考虑将播放器周围的所有控件分组到可以在进入“全屏”模式时折叠的面板中。使用网格控件展开所有内容,并确保播放器所在的行 / 单元格设置为“*”大小调整。这意味着当其他控件折叠时,它将占用所有可用空间。
我在我的博客上有一篇详细的文章,展示了如何使用Visual States来处理各种Windows 8窗口状态(填充,捕捉等)。希望这篇文章可以帮助你找到正确的方向。
http://jaredbienz.wordpress.com/2012/04/22/wp-to-w8-view-states-using-visual-state-manager/
当您准备好在运行时更改状态时,请调用
VisualStateManager.GoToState(this, "FullScreen", true);
第一个参数( this )表示我们正在改变整个窗口的状态。第二个参数是我们要切换到的状态的名称,最后一个参数是您是否要在状态中使用转换(或动画)。
开发人员的支持,设计支持和更加出色的善意:http://bit.ly/winappsupport