Я использую 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;
Это и любое другое предлагаемое решение не работает, пожалуйста, помогите мне решить эту проблему, спасибо.