在 WPF WebBrowser 中托管的 Web canvas 上,左键单击不起作用
Left-click doesn't work on web canvas being hosted in WPF WebBrowser
我正在尝试使用 WebBrowser 在我的 WPF 中显示 vis.js 网页,页面显示成功,但我可以左键单击 canvas 中的任何项目。
鼠标缩放在 canvas.
中按预期工作
我写了一个简单的项目,只包含2个文件:
MainWindow.xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<WebBrowser x:Name="webBrowser"></WebBrowser>
</Grid>
</Window>
MainWindow.xaml.cs:
using System.Windows;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
webBrowser.Navigate("http://visjs.org/examples/network/other/configuration.html");
}
}
}
注意:我在注册表中添加了以下键,因此我的 WPF 进程将使用 IE11:
Key name: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet
Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\processName.exe
Type: REG_DWORD Value Data: 11000 (decimal)
我不会直接回答你的问题,但我会根据我的经验给你一些建议,那就是:永远不要将默认的 wpf WebBrowser 用于任何非常严重的事情。我曾多次尝试将它用于许多不同的项目,并且 总是 遇到一些阻碍问题,无一例外。当然,那是 IE11(10,9 - 正如我所说的,我尝试了很多次)仿真。
以你的案例为例。不仅 canvas 点击不起作用 - 整个页面被完全破坏。如果您尝试选择一种颜色,滑块就会乱七八糟 - 再次点击不起作用,而且这个 单个页面 上还有很多问题。
所以,不要为 wpf WebBrowser 而烦恼,只需使用真正的浏览器,例如 Chromium。我个人更喜欢 CefSharp wpf 绑定到铬。只需安装他们的 nuget 包 (CefSharp.WPF),然后:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<wpf:ChromiumWebBrowser x:Name="webBrowser"/>
</Grid>
</Window>
和
InitializeComponent();
webBrowser.Address = "http://visjs.org/examples/network/other/configuration.html";
您的页面会正常显示。 Canvas 点击有效,没有样式被破坏,颜色选择器有效。除此之外,cefsharp 浏览器控件 更 更灵活。您可以轻松调用 to\from javascript,拦截几乎每个事件(资源加载、重定向),您可以禁用 javascript\images,甚至拦截请求并提供完全不同的数据。无需在每台客户端计算机上修复注册表。
请注意,如果您要通过包安装 CefSharp.WPF,则需要您的项目具有 x86\x64 平台(不适用于 AnyCPU)。但是你确实可以让它与任何 CPU 一起工作,如果你有这样的要求的话。
我正在尝试使用 WebBrowser 在我的 WPF 中显示 vis.js 网页,页面显示成功,但我可以左键单击 canvas 中的任何项目。
鼠标缩放在 canvas.
中按预期工作我写了一个简单的项目,只包含2个文件:
MainWindow.xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<WebBrowser x:Name="webBrowser"></WebBrowser>
</Grid>
</Window>
MainWindow.xaml.cs:
using System.Windows;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
webBrowser.Navigate("http://visjs.org/examples/network/other/configuration.html");
}
}
}
注意:我在注册表中添加了以下键,因此我的 WPF 进程将使用 IE11:
Key name: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\processName.exe Type: REG_DWORD Value Data: 11000 (decimal)
我不会直接回答你的问题,但我会根据我的经验给你一些建议,那就是:永远不要将默认的 wpf WebBrowser 用于任何非常严重的事情。我曾多次尝试将它用于许多不同的项目,并且 总是 遇到一些阻碍问题,无一例外。当然,那是 IE11(10,9 - 正如我所说的,我尝试了很多次)仿真。
以你的案例为例。不仅 canvas 点击不起作用 - 整个页面被完全破坏。如果您尝试选择一种颜色,滑块就会乱七八糟 - 再次点击不起作用,而且这个 单个页面 上还有很多问题。
所以,不要为 wpf WebBrowser 而烦恼,只需使用真正的浏览器,例如 Chromium。我个人更喜欢 CefSharp wpf 绑定到铬。只需安装他们的 nuget 包 (CefSharp.WPF),然后:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<wpf:ChromiumWebBrowser x:Name="webBrowser"/>
</Grid>
</Window>
和
InitializeComponent();
webBrowser.Address = "http://visjs.org/examples/network/other/configuration.html";
您的页面会正常显示。 Canvas 点击有效,没有样式被破坏,颜色选择器有效。除此之外,cefsharp 浏览器控件 更 更灵活。您可以轻松调用 to\from javascript,拦截几乎每个事件(资源加载、重定向),您可以禁用 javascript\images,甚至拦截请求并提供完全不同的数据。无需在每台客户端计算机上修复注册表。
请注意,如果您要通过包安装 CefSharp.WPF,则需要您的项目具有 x86\x64 平台(不适用于 AnyCPU)。但是你确实可以让它与任何 CPU 一起工作,如果你有这样的要求的话。