WPF: InkCanvas + Frame

Мне нужно нарисовать над страницей 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>

1 ответ

Решение

Когда элемент управления Frame перемещается к содержимому HTML, элемент управления Frame внутренне создает собственный элемент управления ActiveX WebBrowser. Это включает HWND взаимодействия. В результате этого вступает в игру "воздушное пространство". По сути, это означает, что содержимое WPF не может перекрывать этот AcitveX HWND. Вы можете частично обойти эту проблему, обернув оверлей в другой HWND (например, используя Winfows Forms и ElementHost). Но это решение не позволит вам иметь прозрачность в оверлее.

Другой трюк, который вы можете попробовать, это использовать WindowsFormsHost для размещения элемента управления браузера Windows Forms вместо использования Frame.

Наконец, что не менее важно, вы можете использовать Chromium WPF Webbrowser Control вместо элемента управления Frame, если вы можете себе это позволить. Он основан на библиотеке Awesomium. К сожалению, это бесплатно только для некоммерческого использования. Это единственное решение, которое позволяет вам использовать все расширенные возможности WPF, такие как преобразование (вращение, перекос и т. Д.), Битовые эффекты или прозрачность и т. Д. Расширите два других решения, которые вы привязали к фиксированному непрозрачному прямоугольнику.

Другие вопросы по тегам