2009-06-11 71 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