2016-04-21 7 views
1

Ich versuche vis.js Web-Seite in meinem WPF mit WebBrowser, die Seite erfolgreich präsentiert, aber ich kann mit der linken Maustaste auf einen der Elemente in der Zeichenfläche .Linksklick funktioniert nicht auf Web-Canvas gehostet in WPF WebBrowser

Mauszoom funktioniert wie erwartet in der Arbeitsfläche.

Ich schrieb ein einfaches Projekt nur zwei Dateien enthält:

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"); 
     } 
    } 
} 

Hinweis: Ich habe meine Registrierungs addierten die folgenden Schlüssel, damit mein WPF-Prozess IE11 verwendet:

Schlüsselname: HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Internet Explorer \ Main \ Featurecontrol \ FEATURE_BROWSER_EMULATION \ processName.exe Typ: REG_DWORD Wert: 11000 (dezimal)

Antwort

1

Ich werde Ihre Frage nicht direkt beantworten aber ich gebe dir einen Ratschlag basierend auf meiner Erfahrung, und das ist: benutze niemals den Standard wpf WebBrowser für irgendwas, das auch nur entfernt seriös ist. Ich habe versucht, es viele Male für viele verschiedene Projekte zu verwenden und immer bekam einige Showstopper Problem, keine Ausnahmen. Und natürlich ist das mit IE11 (10,9 - ich habe es oft versucht, wie gesagt) Emulation.

Schauen Sie sich zum Beispiel Ihren Fall an. Nicht nur Canvas-Klicks funktionieren nicht - die ganze Seite ist komplett zerstört. Schieberegler sind durcheinander, wenn Sie versuchen, eine Farbe zu wählen - klicken Sie wieder nicht funktionieren, und viele weitere Probleme auf dieser einzigen Seite.

Also, kümmern Sie sich nicht um Wpf WebBrowser und verwenden Sie nur einen echten Browser, zum Beispiel Chromium. Ich persönlich bevorzuge CefSharp, die wpf Bindung an Chrom hat. Installieren Sie einfach ihre nuget Paket (CefSharp.WPF), dann gilt:

<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> 

Und

InitializeComponent(); 
webBrowser.Address = "http://visjs.org/examples/network/other/configuration.html"; 

Und Sie Seite nur zeigt, wie es sollte. Canvas-Klicks funktionieren, keine Stile werden gelöscht, Farbwähler funktionieren. Zusätzlich zu all dem ist Cefsharp Browser-Steuerelement viel flexibler. Sie können von Javascript einfach aufrufen, fast jedes Ereignis (Ressourcenlast, Umleitungen) abfangen, Javascript \ images deaktivieren, sogar Anfragen abfangen und komplett andere Daten einspeisen. Und keine Notwendigkeit, die Registrierung auf jedem Client-Rechner zu reparieren.

Beachten Sie, dass wenn Sie CefSharp.WPF über das Paket installieren, erfordert Ihr Projekt x86 \ x64-Plattform (funktioniert nicht mit AnyCPU). Aber Sie wirklich kann machen es mit wenig Aufwand, mit anyCPU arbeiten, wenn Sie solche Anforderung haben würden.

+0

Danke! es funktioniert, können Sie mir helfen, wie es auf AnyCPU funktioniert? –

+0

Ich verweise grundsätzlich x64-Version der Ziel-DLLs in meiner Entwicklungsumgebung von meinem AnyCPU-Projekt, und bei der Bereitstellung auf Client - wird die korrekte Version (x64 \ x86) von cefsharp heruntergeladen und bereitgestellt. Die Tatsache, dass ich x64 von AnyCPU referenziere, tut nicht weh, weil auf dem Client immer die korrekte Version aller Bibliotheken vorhanden ist.Sie können auch beide x64 \ x86-Versionen von CefSharp auf dem Client bereitstellen und zur Laufzeit entscheiden, welche Version verwendet werden soll (z. B. das AssemblyResolve-Ereignis von AppDomain). – Evk

Verwandte Themen