WPF WebBrowser(3.5 SP1)始终位于顶部 - 在WPF中显示HTML的其他建议

时间:2009-06-11 10:13:57

标签: c# html wpf .net-3.5

我一直在拼命寻找在WPF应用程序中显示HTML的简单方法。 有一些选择:
1)使用WPF WebBrowser控件
2)使用框架控制
3)使用第三方控制

但是,我遇到了以下问题: 1)WPF WebBrowser控件不是真正的WPF(它是一个包装在WPF中的Winforms控件)。我找到了一种为此创建包装器的方法,并使用DependencyProperties导航到带有绑定和propertychanged的HTML文本。 这个问题是,如果你在WPF scrollviewer中放置Winforms控件,它不会尊重z-index,这意味着winform始终位于其他WPF控件之上。这非常烦人,我试图通过创建一个承载ElemenHost等的WindowsFormsHost来解决它。但这显然完全破坏了我的绑定。

2)如果显示HTML内容,则帧控制具有相同的显示问题。不是一种选择。

3)我还没有找到WPF的原生HTML显示。所有选项都是winforms,并且存在上述问题。

目前我唯一的出路就是使用微软的HtmlToXamlConverter,它有时会很难崩溃。 (MSDN

有没有人对如何在WPF中显示HTLM有任何其他建议,没有这些问题?

抱歉这个长期的问题,希望有人知道我在说什么......

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

如果您不能使用WebBrowser,最好的办法是将HTML内容重写为FlowDocument(如果您使用的是静态HTML内容)。

否则,正如你所提到的,你需要特殊情况下的WebBrowser,你是对的,它不像“真正的”WPF控件。您应该创建一个可以绑定到的ViewModel对象,它表示WebBrowser控件,您可以在一个位置隐藏所有丑陋的非绑定代码,然后再也不会打开它:)

答案 2 :(得分:1)

解决z-index限制的另一种方法是使用弹出窗口在HTML上覆盖WPF组件 请参阅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>

另外,有一个第三方控件采用Win32控件并将它们(作为位图)呈现为WPF http://www.codeplex.com/WPFWin32Renderer