2010-08-31 3 views
0

Je dois dessiner sur la page HTML. Page affichée dans un élément Frame. Le problème est que InkCanvas ne fonctionne pas avec Frame. J'ai essayé d'insérer TextBlock au lieu de Frame - travaux de peinture.WPF: InkCanvas + Frame

ne fonctionne pas:

<Frame Grid.Row="1" Source="http://google.com/"></Frame> 
<InkCanvas Grid.Row="1" x:Name="inkCanvas" Background="Transparent"></InkCanvas> 

travail:

<TextBlock Grid.Row="1" Margin="10" Text="Some text"></TextBlock> 
<InkCanvas Grid.Row="1" x:Name="inkCanvas" Background="Transparent"></InkCanvas> 

Répondre

1

Lorsque le contrôle Frame navigue en HTML contenu, le contrôle Frame instantie interne du navigateur Web natif de contrôle ActiveX. Cela implique HWND interop. À la suite de cela, le "airspace proplem" entre en scène. Cela signifie essentiellement qu'aucun contenu WPF ne peut chevaucher ce HWND AcitveX. Vous pouvez en partie contourner ce problème en enveloppant la superposition dans un autre HWND (par exemple en utilisant Winfows Forms et ElementHost). Mais cette solution ne vous permettra pas d'avoir de la transparence dans la superposition.

Une autre astuce que vous pourriez essayer est d'utiliser le WindowsFormsHost pour héberger le Windows Forms Browser Control au lieu d'utiliser un cadre.

Enfin et surtout, vous pouvez utiliser le Chromium WPF Webbrowser Control au lieu du contrôle Frame si vous pouvez vous le permettre. Il est basé sur la bibliothèque Awesomium. Ce qui malheureusement est seulement free for non commercial use. C'est la seule solution qui vous permet d'utiliser tous les goodies WPF avancés comme la transformation (rotation, inclinaison, etc.), bitmapeffects ou la transparence, etc. Largeur des deux autres solutions vous êtes lié à un rectangle opaque fixe.

+0

Merci pour la réponse détaillée! – Rover

Questions connexes