WPF: InkCanvas + Frame - PullRequest
       11

WPF: InkCanvas + Frame

0 голосов
/ 31 августа 2010

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

1 голос
/ 31 августа 2010

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

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

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

...