UWP:不要缩放滚动查看器中媒体播放器元素的媒体传输控件

UWP: Do not zoom media transport controls for a media player element inside a scroll viewer

我想为媒体播放器元素(UWP C#) 添加缩放功能。我将 MediaPlayerElement 放在滚动查看器中,并且缩放功能正常工作。但是内置的媒体传输传输控件也正在缩放和滚动。我希望修复媒体传输控件。我尝试为传输控制设置边距和高度和宽度 属性。但它们似乎不起作用。如何避免传输控制栏的缩放和滚动

XAML:

<ScrollViewer 
                Name="ScrollViewerMain"
                HorizontalScrollBarVisibility="Hidden"
                VerticalScrollBarVisibility="Hidden"
                MinZoomFactor="1" 
                ZoomMode="Enabled"
                HorizontalAlignment="Center" Height="314" Margin="427,186,0,0" 
                VerticalAlignment="Center" Width="730" HorizontalScrollMode="Auto" 
                VerticalScrollMode="Auto" ManipulationMode="System" 
                HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
                <MediaPlayerElement x:Name="mpe" Stretch="Uniform" 
                ScrollViewer.VerticalScrollBarVisibility="Disabled" 
                AreTransportControlsEnabled="True"
                MaxWidth="{Binding Path=ViewportWidth, ElementName=ScrollViewerMain}"
                MaxHeight="{Binding Path=ViewportHeight, ElementName=ScrollViewerMain}"
                   />
 </ScrollViewer>

ScrollViewer的缩放是一个整体行为,它的缩放相当于你看物体的距离。

物体从远处看很小,但物体本身的大小是恒定的。

当你用ScrollViewer缩放时,必然会改变整体。

因此,如果您打算手动缩放 MediaPlayerElement,有两种选择:

  1. 通过PointerWheelChangedManipulationDelta事件获取用户操作的增量,改变MediaPlayerElementwidth/height按增量。

    当直接改变控件的大小时,MediaTransportControls的图标会保持原来的大小

    关于手势,这个document可能会有帮助。


  1. 不显示MediaPlayerElement本身的MediaTransportControls,自己重写一个传输控件,独立于ScrollViewer,叠加在上面,像这样:
<Grid>
    <ScrollViewer HorizontalScrollBarVisibility="Hidden"
                  VerticalScrollBarVisibility="Hidden"
                  MinZoomFactor="1" 
                  ZoomMode="Enabled">
        <MediaPlayerElement Stretch="Uniform"
                            AreTransportControlsEnabled="False"
                            />
    </ScrollViewer>
    <MyTransportControls VerticalAlignment="Bottom"
                         HorizontalAlignment="Stretch"
                         />
</Grid>

这样,当ScrollViewer放大时,只会影响MediaPlayerElement,不会影响TransportControls


更新

通过与工程师沟通,我们得出结论,触摸板发送的是Pointer个事件,而不是Manipulation个事件。您可以使用 PointerWheelChanged 事件处理触摸板的捏合输入。

此致。