2009-06-11 70 views
23

我一直在拼命寻找一种在WPF应用程序中显示HTML的简单方法。 有一些选项:
1)使用WPF WebBrowser控件
2)使用帧控制
3)使用第三方控制
WPF WebBrowser(3.5 SP1)总是在顶部 - 其他建议在WPF中显示HTML

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

2)如果框架控件显示HTML内容,它与显示相同。没有选择。

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

我现在唯一的出路就是使用微软有问题的HtmlToXamlConverter,它有时会崩溃。 (MSDN

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

抱歉长的问题,希望有人知道我在说什么关于...

+0

您可以备份并描述您需要显示的HTML吗?可能有一种更简单或更原生的方式来实现您的目标,因为它看起来很难将HTML压缩到XAML中。 – 2009-06-15 21:09:20

+0

好吧,我只需要在WPF应用程序中显示HTML(主要由outlook生成,但也来自webapps中的HTML编辑器)。编辑HTML不是必需的,因为它发生在不同的组件中。我已经尝试使这个组件成为只读,并从所有编辑功能中剥离它,但是这对我的绑定(它也是一个winform组件)不起作用。 使用显示HTML我的意思是显示格式,颜色,字体大小,链接...图像也不错。 – RoelF 2009-06-17 08:35:12

+0

找到了一个好方法呢?我遇到了同样的问题。 – discorax 2009-10-18 07:20:31

回答

1

如果您不能使用web浏览器,你最好的选择是可能重写你的HTML内容转换成一个FlowDocument的(如果你'使用静态HTML内容)。否则,正如你所提到的,你需要特殊的WebBrowser,你是对的,它并不像一个“真正的”WPF控件。你应该创建一个你可以绑定的ViewModel对象,它代表WebBrowser控件,你可以在其中隐藏所有丑陋的非绑定代码,然后永远不会再打开它:)

1

另一种绕过z-index的限制是使用弹出在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组件(如位图)转换成WPF http://www.codeplex.com/WPFWin32Renderer