【问题标题】:Capture swipe events on Grid without ListView with scrollbar getting in the way在不使用滚动条妨碍 ListView 的情况下捕获 Grid 上的滑动事件
【发布时间】:2015-10-17 22:42:09
【问题描述】:

我有一个处理滑动事件的Grid。在此Grid 上放置了ListView。不幸的是,如果ListView 有自己的滚动条(比页面大),它会“吃掉”所有的滑动事件。无法在ListView 所在的屏幕部分捕获向左或向右滑动事件。

GridListView

<Grid
    Name="SwipingSurface"
    Background="Transparent"
    Height="657"
    Margin="30">
   (...)
    <ListView 
        ShowsScrollingPlaceholders="True"
        Grid.Row="1"
        ItemsSource="{Binding MeditationDiary}" 
        FontFamily="Segoe WP" 
        Margin="0,45.5,0,0" 
        Grid.RowSpan="2" 
        d:LayoutOverrides="TopPosition, BottomPosition">
        <ListView.ItemTemplate>
            <DataTemplate>
               [Grid and textblock template]
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

处理滑动(向右)事件的代码:

public MainPage()
{
    this.InitializeComponent();

    this.NavigationCacheMode = NavigationCacheMode.Required;

    SwipingSurface.ManipulationMode = ManipulationModes.TranslateX | ManipulationModes.TranslateY;
    SwipingSurface.ManipulationStarted += OnStarted;
    SwipingSurface.ManipulationCompleted += OnManipulationCompleted;
}

public void OnStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
    _initialPoint = e.Position;
}

public void OnManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e)
{
    var currentPoint = e.Position;
    if (_initialPoint.X - currentPoint.X >= Constants.SwipingTreshold)
    {
        // Do something
    }
}

有没有办法能够在Grid 上处理滑动事件而不会受到ListView 的阻碍?

/edit 有人对这个问题进行了投票,因为他或她发现不清楚要问什么,所以特此澄清:上面的代码生成下面的ListView。如果您在History 上滑动,则可以向左滑动并注意事件。但是,如果您在包含内容的ListView 上滑动(仅当它比页面长并且您可以向下滚动时),则不会注册滑动。我认为这是因为 ListView 正在捕获事件。

【问题讨论】:

    标签: c# xaml listview windows-phone-8.1


    【解决方案1】:

    也许将 ScrollViewer.Horizo​​ntalScrollBarVisibility="Disabled" 添加到您的 listView 声明可能会有所帮助。作为替代方案,您可以尝试修改 listView 的样式。也许你会在那里找到一个滚动查看器,然后设置它的属性禁用它。

    【讨论】:

    • 谢谢。不幸的是,添加 ScrollViewer.HorizontalScrollBarVisibility="Disabled" 并没有帮助。我找不到任何可以更改为ScrollViewer 风格的东西。我也试过:ManipulationMode="None"ShowsScrollingPlaceholders="False"
    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2016-06-23
    • 2014-10-25
    • 2020-08-09
    • 2014-05-10
    相关资源
    最近更新 更多