我在加载普通网页的WPF项目中使用CefSharp。 我的问题是,使用触摸屏,我可以单击任何链接或按钮,但不能滚动页面。 任何带有滚动条的网页都存在该问题。
我在Windows 10上使用带有WPF的cefsharp / 65 X86。
在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 是mainwindow.xaml上cefsharp组件的名称
在App.xaml中
settings.CefCommandLineArgs.Add("touch-events", "1");
settings.MultiThreadedMessageLoop = false;
此解决方案和其他任何建议的解决方案均无效,请帮助我解决此问题,谢谢。