Не удается включить сенсорную прокрутку на CefSharp WPF - PullRequest
0 голосов
/ 06 сентября 2018

Я использую CefSharp в проекте WPF, который загружает обычные веб-страницы. Моя проблема в том, что с сенсорным экраном я могу нажимать любую ссылку или кнопку, но не прокручивать страницу. Проблема присутствует на любой веб-странице с полосой прокрутки.

Я использую cefsharp / 65 X86 с WPF в Windows 10.

После некоторого обсуждения на странице проекта github (https://github.com/cefsharp/CefSharp/issues/228#issuecomment-318976804) я добавил следующие методы:

    private void browser_TouchMove(object sender, TouchEventArgs e)
    {
        if (host != null && IsMouseDown)
        {
            TouchPoint t = e.GetTouchPoint(this);
            Point p = t.Position;

            if (!LastSavedPoint.HasValue)
                LastSavedPoint = p;

            int x = (int)p.X;
            int y = (int)p.Y;
            int oldX = (int)LastSavedPoint.Value.X;
            int oldy = (int)LastSavedPoint.Value.Y;

            host.SendMouseWheelEvent(x, y, 0, y - oldy, CefEventFlags.MiddleMouseButton);

            LastSavedPoint = p; //Store the last Point for reference
        }
    }

    void browser_TouchDown(object sender, TouchEventArgs e)
    {
        if (host == null)
        {
            IWebBrowser host2 = browser; // **your Browser's  Instance** 
            IBrowser bworser = host2.GetBrowser();
            host = bworser.GetHost(); // Get host from Browser
        }
        IsMouseDown = true;
        // this.Cursor = System.Windows.Input.Cursors.None;
    }

    private void browser_TouchLeave(object sender, TouchEventArgs e)
    {
        IsMouseDown = false;
        LastSavedPoint = null;
    }

    void browser_TouchUp(object sender, TouchEventArgs e)
    {
        IsMouseDown = false;
        LastSavedPoint = null;
    }

, которые ссылаются на эти переменные:

    bool IsMouseDown = false;
    Point? LastSavedPoint = null;
    IBrowserHost host;

и все вместе

    browser.TouchMove += browser_TouchMove;
    browser.TouchDown += browser_TouchDown;
    browser.TouchLeave += browser_TouchLeave;
    browser.TouchUp += browser_TouchUp;

, где browser - это имя компонента cefsharp в mainwindow.xaml

В приложении. Xaml

    settings.CefCommandLineArgs.Add("touch-events", "1");
    settings.MultiThreadedMessageLoop = false;

Это и любое другое предлагаемое решение не работает, пожалуйста, помогите мне решить эту проблему, спасибо.

...