首页 > 解决方案 > UWP:不要缩放滚动查看器内媒体播放器元素的媒体传输控件

问题描述

我想为媒体播放器元素(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>

标签: c#windowszoomingmediauwp-xaml

解决方案


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

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

当你使用ScrollViewer缩放时,它不可避免地会改变整体。

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

  1. PointerWheelChanged通过orManipulationDelta事件获取用户操作的增量,通过增量改变width/heightMediaPlayerElement

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

    关于手势,本文档可能会有所帮助。


  1. 不要显示自己,自己重写一个传输控件,独立于MediaTransportControls,并覆盖在上面,像这样:MediaPlayerElementScrollViewer
<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

此致。


推荐阅读