【问题标题】:How to get manipulation events to work on an element that contains a ScrollViewer child如何让操作事件对包含 ScrollViewer 子项的元素起作用
【发布时间】:2016-01-01 15:27:57
【问题描述】:

假设我有以下 XAML:

<Grid ManipulationMode="TranslateY" ManipulationDelta="Grid_ManipulationDelta">
    <ScrollViewer HorizontalScrollMode="Enabled" VerticalScrollMode="Disabled" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Hidden">
        <StackPanel Orientation="Horizontal">
            <Rectangle Width="100" Height="100" Fill="Red" />
            <Rectangle Width="100" Height="100" Fill="Blue" />
            <Rectangle Width="100" Height="100" Fill="Red" />
            <Rectangle Width="100" Height="100" Fill="Blue" />
            <Rectangle Width="100" Height="100" Fill="Red" />
            <Rectangle Width="100" Height="100" Fill="Blue" />
            <Rectangle Width="100" Height="100" Fill="Red" />
            <Rectangle Width="100" Height="100" Fill="Blue" />
        </StackPanel>
    </ScrollViewer>
</Grid>

(StackPanel 只是任意内容。)

我希望 Grid 只处理 TranslateY 操作事件,而 ScrollViewer 只处理水平滚动;但是,即使操作是垂直的而不是水平的,ScrollViewer 也会优先。 Grid 从不接收 ManipulationDelta 事件,除非我禁用 ScrollViewer 上的滚动,这显然不是我想要的。

这是否与 ScrollViewer 的直接操作事件的“神奇”行为有关?我也尝试过“rails”设置的不同组合(即在 ScrollViewer 上将 Grid 的 ManipulationMode 设置为 TranslateRailsY 并将 IsHorizo​​ntalRailEnabled 设置为 true),但它仍然不起作用。

【问题讨论】:

    标签: c# xaml uwp windows-runtime winrt-xaml


    【解决方案1】:

    你是对的,ScrollViewer 的父元素不会收到 manipulation 事件,因为它们被 ScrollViewer直接操作 事件阻止。

    但是,只要ManipulationMode 包含System 模式,ScrollViewer 的元素就可以接收它们。

    在您的特定情况下,您需要监视 StackPanel 上的 ManipulationDelta 事件并将其 ManipulationMode 设置为 TranslateY,System

    别忘了给你的StackPanel 一个Transparent 背景来接收事件。

    <StackPanel Background="Transparent" ManipulationMode="TranslateY,System" ManipulationDelta="StackPanel_ManipulationDelta">
    

    【讨论】:

      【解决方案2】:

      ScrollViewer 将操作事件标记为已处理,这会导致它不会冒泡到 Grid。你必须改变这种行为。

      您可以从 ScrollViewer 订阅 ManipulationStarted 事件。有关该事件的文档应该可以帮助您入门。

      【讨论】:

      • ScrollViewer 在 UWP 中是 sealed
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多