Как заставить ScrollView поддерживать прокрутку мышью в приложении UWP? - PullRequest
0 голосов
/ 30 июня 2019

Я использую ScrollView в своем приложении UWP.И он поддерживает сенсорную прокрутку, но не поддерживает мышь wheel scroll and drag scroll.

После некоторых исследований я обнаружил, что, определяя событие PointerWheelChanged, оно может работать.

Код XAML:

 PointerWheelChanged="ScrollViewer_PointerWheelChanged"

Код C #:

private void ScrollViewer_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
    var scv = (ScrollViewer)sender;
    scv.ScrollToHorizontalOffset(scv.HorizontalOffset - e.Delta);
    e.Handled = true;
}

Но я получил сообщение об ошибке:

PointerRoutedEventArgs 'не содержит определения для «Delta», и ни один доступный метод расширения «Delta», принимающий первый аргумент типа «PointerRoutedEventArgs», не можетбыть найденным

Как это решить?Спасибо!

Я приложил все коды XAML и C # для вашей справки, любой мог проверить это в вашей VS.

Я вижу горизонтальную полосу прокрутки и перетаскиваю ее, чтобы перемещать кнопки.Я могу использовать сенсорный для перемещения кнопок.Но я не могу использовать колесо мыши или перетаскивать кнопки мышью.

<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<Grid>
    <Canvas>
        <ScrollViewer  
        Width="400" 
        Height="150" 
        PointerWheelChanged="ScrollViewer_PointerWheelChanged"
        HorizontalScrollMode="Enabled" 
        HorizontalScrollBarVisibility="Visible" 
        VerticalScrollBarVisibility="Hidden">
            <StackPanel Orientation="Horizontal">
                <Button Width="200">Data 1
                </Button>
                <Button Width="200">Data 2
                </Button>
                <Button Width="200">Data 3
                </Button>
                <Button Width="200">Data 4
                </Button>
                <Button Width="200">Data 5
                </Button>
                <Button Width="200">Data 6
                </Button>
                <Button Width="200">Data 7
                </Button>
                <Button Width="200">Data 8
                </Button>
                <Button Width="200">Data 9
                </Button>
                <Button Width="200">Data 10
                </Button>
            </StackPanel>
        </ScrollViewer>
        <Rectangle  
        Width="200" 
        Height="135" 
        Canvas.Left="200" 
        Fill="Transparent" 
        Stroke="Red" 
        StrokeThickness="2"/>
    </Canvas>
</Grid>

C # код:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409

namespace App1
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
        }

        private void ScrollViewer_PointerWheelChanged(object sender, PointerRoutedEventArgs e)
        {
            //ScrollViewer scv = (ScrollViewer)sender;
            //scv.ScrollToHorizontalOffset(scv.HorizontalOffset - e.Delta);
            //e.Handled = true;
            Debug.WriteLine("wheel changed................");
        }
    }
}

1 Ответ

0 голосов
/ 01 июля 2019

Я использую ScrollView в своем приложении UWP.И он поддерживает сенсорную прокрутку, но не поддерживает прокрутку колесика мыши и перетаскивание.

UWP ScrollViewer позволяет использовать колесико мыши для прокрутки содержимого.Я проверяю ваш код выше, и он работает хорошо.При использовании колесика мыши, наведите курсор на ScrollViewer (над прямоугольником будет накрыта часть ScrollViewer).Если вы просто хотите горизонтальную прокрутку, вам нужно отключить вертикальную прокрутку.И поведение drag scroll работает только на сенсорном устройстве.

<ScrollViewer
    Width="400"
    Height="150"
    HorizontalScrollBarVisibility="Visible"
    HorizontalScrollMode="Enabled"
    VerticalScrollBarVisibility="Hidden"
    VerticalScrollMode="Disabled"
    >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...