在 FullWindows 模式下,MediaElement 的操作事件不会触发
Manipulation events of MediaElement not fire when on FullWindows mode
当我将播放器设置为非全屏时 (player.IsFullWindows = false),事件正常工作,但是当将播放器更改为全屏时,所有操作事件都不起作用。有人有解决办法吗?
<MediaElement Name="player"
Margin="10,5" ManipulationCompleted="player_ManipulationCompleted"
ManipulationDelta="Grid_ManipulationDelta"
ManipulationMode="TranslateX"
>
我可以通过同时启用 IsFullWindow="True" 和 AreTransportControlsEnabled="True" 来重现这种情况。我认为这是有道理的,因为当我们处于 Full Window 模式时,它将转到名为 FullWindowMediaRoot 的新层,而不是 媒体元素。在 FullWindowMediaRoot 中,它是 MediaTransportControls。您可以通过使用 Live Visual Tree 清楚地看到这一点,如下所示:
所以当我们处于 Full Window 模式时,我们需要处理 TransportControls 的操作事件,而不是 MediaElement 的操作事件,如下所示:
public MainPage()
{
this.InitializeComponent();
player.TransportControls.ManipulationMode = ManipulationModes.TranslateX;
player.TransportControls.ManipulationDelta += TransportControls_ManipulationDelta;
player.TransportControls.ManipulationCompleted += TransportControls_ManipulationCompleted;
}
private void TransportControls_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
}
private void TransportControls_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
}
谢谢。
当我将播放器设置为非全屏时 (player.IsFullWindows = false),事件正常工作,但是当将播放器更改为全屏时,所有操作事件都不起作用。有人有解决办法吗?
<MediaElement Name="player"
Margin="10,5" ManipulationCompleted="player_ManipulationCompleted"
ManipulationDelta="Grid_ManipulationDelta"
ManipulationMode="TranslateX"
>
我可以通过同时启用 IsFullWindow="True" 和 AreTransportControlsEnabled="True" 来重现这种情况。我认为这是有道理的,因为当我们处于 Full Window 模式时,它将转到名为 FullWindowMediaRoot 的新层,而不是 媒体元素。在 FullWindowMediaRoot 中,它是 MediaTransportControls。您可以通过使用 Live Visual Tree 清楚地看到这一点,如下所示:
所以当我们处于 Full Window 模式时,我们需要处理 TransportControls 的操作事件,而不是 MediaElement 的操作事件,如下所示:
public MainPage()
{
this.InitializeComponent();
player.TransportControls.ManipulationMode = ManipulationModes.TranslateX;
player.TransportControls.ManipulationDelta += TransportControls_ManipulationDelta;
player.TransportControls.ManipulationCompleted += TransportControls_ManipulationCompleted;
}
private void TransportControls_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
}
private void TransportControls_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
}
谢谢。