Подтвердить что ты не робот

WPF WebBrowser (3.5 SP1) Всегда сверху - другое предложение отображать HTML в WPF

Я отчаянно искал простой способ отображения HTML в WPF-приложении. Есть несколько вариантов:
1) использовать WPF WebBrowser Control
2) используйте Frame Control
3) использовать сторонний элемент управления

но я столкнулся с следующими проблемами: 1) WPF WebBrowser Control не является реальным WPF (это элемент управления Winforms, завернутый в WPF). Я нашел способ создать обертку для этого и использовать DependencyProperties, чтобы перейти к тексту HTML с привязками и propertychanged. Проблема с этим заключается в том, что если вы поместите элемент управления Winforms в scrollviewer WPF, он не будет уважать z-index, то есть winform всегда находится поверх другого элемента управления WPF. Это очень раздражает, и я попытался обойти это, создав WindowsFormsHost, в котором размещается ElemenHost и т.д., Но это полностью нарушает мою привязку.

2) Frame Control имеет те же проблемы с отображением, если он показывает содержимое HTML. Не вариант.

3) Я не нашел собственный HTML-дисплей для WPF. Все варианты - winforms, и с вышеупомянутыми проблемами.

Единственный выход, который у меня есть на данный момент, - это использовать Microsoft buggy HtmlToXamlConverter, который иногда может быть поврежден. (MSDN)

Есть ли у кого-нибудь другие предложения о том, как отображать HTLM в WPF, без этих проблем?

Извините за длинный вопрос, надеюсь, что кто-то знает, о чем я говорю...

4b9b3361

Ответ 1

Если вы не можете использовать WebBrowser, лучше всего переписать HTML-контент в FlowDocument (если вы используете статический HTML-контент).

В противном случае, как вы уже упоминаете, у вас есть специальный веб-браузер WebBrowser, вы правы, что он не действует как "реальный" элемент управления WPF. Вероятно, вы должны создать объект ViewModel, с которым вы можете привязать объект, который представляет элемент управления WebBrowser, где вы можете скрыть весь уродливый несвязывающий код в одном месте, а затем никогда не открывать его снова:)

Ответ 3

Другим подходом к ограничению z-индекса является использование всплывающего окна для наложения ваших компонентов WPF на HTML См. http://karlshifflett.wordpress.com/2009/06/13/wpf-float-buttons-over-web-browser-control/ Указанный ниже код берется прямо из ссылки

<Grid>
  <WebBrowser x:Name="wbBrowser" />

  <Popup x:Name="puOverlay" AllowsTransparency="True" Placement="Bottom"
         PlacementTarget="{Binding ElementName=wbBrowser}">
    <Border x:Name="bdrOverLay" CornerRadius="30" BorderBrush="Blue"
            Background="#1F000000" Padding="7" BorderThickness="2">

      <StackPanel Orientation="Horizontal">
        <StackPanel.Resources>
          <Style TargetType="{x:Type Button}">
            <Setter Property="Width" Value="75" />
            <Setter Property="Margin" Value="3.5" />
            <Setter Property="VerticalAlignment" Value="Center" />
            <Setter Property="HorizontalAlignment" Value="Center" />
          </Style>
        </StackPanel.Resources>
        <Button Command="NavigationCommands.BrowseBack" Content="Back" />
        <Button Command="NavigationCommands.BrowseForward" Content="Forward" />
        <Button Command="NavigationCommands.BrowseHome" Content="Home" />
        <Button Command="ApplicationCommands.Close" Content="Exit" />
      </StackPanel>

    </Border>
  </Popup>
</Grid>

Alternativly есть сторонний элемент управления, который берет элементы управления Win32 и отображает их (как битовые карты) в WPF http://www.codeplex.com/WPFWin32Renderer