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
,有两种选择:
通过PointerWheelChanged
或ManipulationDelta
事件获取用户操作的增量,改变MediaPlayerElement
的width
/height
按增量。
当直接改变控件的大小时,MediaTransportControls
的图标会保持原来的大小
关于手势,这个document可能会有帮助。
- 不显示
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
事件处理触摸板的捏合输入。
此致。
我想为媒体播放器元素(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
,有两种选择:
通过
PointerWheelChanged
或ManipulationDelta
事件获取用户操作的增量,改变MediaPlayerElement
的width
/height
按增量。当直接改变控件的大小时,
MediaTransportControls
的图标会保持原来的大小关于手势,这个document可能会有帮助。
- 不显示
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
事件处理触摸板的捏合输入。
此致。