【问题标题】:UWP: Do not zoom media transport controls for a media player element inside a scroll viewerUWP:不要缩放滚动查看器内媒体播放器元素的媒体传输控件
【发布时间】:2020-02-24 08:28:09
【问题描述】:

我想为媒体播放器元素(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# windows zooming media uwp-xaml


    【解决方案1】:

    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 事件处理来自触摸板的捏合输入。

    最好的问候。

    【讨论】:

    • 谢谢。我尝试了你的两个建议。 1. 我按照以下文档中的建议注册了操作增量事件(为媒体播放器元素实现捏合和缩放)docs.microsoft.com/en-gb/windows/uwp/audio-video-camera/…我没有收到缩放手势的操作增量事件(在触摸板上尝试了鼠标滚动、捏合手势和拉伸手势) )。但是我收到了翻译手势的事件。我错过了什么吗? (我在删除滚动查看器后在我之前共享的同一个 xaml 中尝试了这个)
    • 2.我尝试实现自定义传输控制。这似乎有效。但是我必须实现 mediaTransportControls 现在正在执行的功能(如自动隐藏、搜索栏...)。为了避免这种情况,我尝试创建一个派生的传输控件,如链接docs.microsoft.com/en-us/windows/uwp/design/… 中所述,并链接派生的媒体传输控件媒体播放器元素如下。 mpe.TransportControls = 派生的mtc;以上导致 ArgumentException:“值不在预期范围内。”我错过了什么吗?
    • 您好,关于 Manipulation,请出示您的代码,以便我们分析您的问题。关于自定义Transport控件,如果从MediaTransportControl派生,可以减少代码量,但必须将派生控件放在&lt;MediaPlayerElement.TransportControls&gt;中,所以不能分离transport控件。
    • 谢谢。我已经分享了我的示例代码:1drv.ms/u/s!AizIJTHyJpeMbBZybyJPe-Xrta0?e=Pnl0KX 关于派生控件,我不能使用它们来避免传输控件的缩放(因为它是 的一部分)。相反,我必须从头开始编写自己的传输控件。我的理解对吗
    • 嗨@karthikvr,抱歉回复晚了。目前,触摸板问题已被判定为bug,已进入处理流程。将在以后的系统版本中修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多