0

我需要在 html 页面上绘制。在 Frame 元素中显示的页面。问题是 InkCanvas 不适用于 Frame。我试图插入 TextBlock 而不是 Frame - 绘画作品。

不工作:

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

工作:

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

1 回答 1

1

当 Frame 控件导航到 HTML 内容时,Frame 控件在内部实例化本机 WebBrowser ActiveX 控件。这涉及 HWND 互操作。因此,“空域问题”开始发挥作用。这基本上意味着没有 WPF 内容可以与 AcitveX HWND 重叠。您可以通过将覆盖层包装到另一个 HWND(例如使用 Winfows Forms 和 ElementHost)来部分解决这个问题。但是此解决方案不允许您在叠加层中具有透明度。

您可以尝试的另一个技巧是使用WindowsFormsHost来托管Windows 窗体浏览器控件,而不是使用框架。

最后但并非最不重要的一点是,如果您负担得起,您可以使用Chromium WPF Webbrowser 控件而不是 Frame 控件。它基于Awesomium库。不幸的是,它只能免费用于非商业用途。这是唯一允许您使用所有高级 WPF 好东西的解决方案,例如转换(旋转、倾斜等)、位图效果或透明度等。将绑定到固定不透明矩形的其他两个解决方案的宽度。

于 2010-08-31T09:52:55.293 回答