2011-05-25 81 views
5

我試圖使我的Windows 7手機應用程序的WebBrowser控件透明,所以它可以有與應用程序的其餘部分相同的主題,但我沒有任何成功與我嘗試過的任何東西。 我需要仍然能夠看到HTML文本,但只是背景是透明的。在控件中使用CSS似乎不起作用,並且我也無法通過XAML使其工作。這可能嗎?這個post,並不令人鼓舞。使WebBrowser透明

回答

4

這是不可能的。瀏覽器引擎總是呈現HTML頁面的背景顏色。您可以爲BODY標籤分配顏色,但「透明」值總是以白色結束。您分配給WebBrowser XAML元素的背景顏色實際上沒有效果,因爲瀏覽器引擎基本上是在其頂部渲染的。

匹配您的應用程序主題的最佳方法是將應用程序主題背景顏色通過InvokeScript傳遞到HTML頁面,然後將其設置在BODY元素上。這假設您可以控制您正在加載的HTML內容。 (另外,不要忘記通過IsScriptEnabled啓用腳本。)

+1

當然,這韓元」的外觀和感覺用圖像背景來幫助他,因爲大多數情況下,人們都會這樣做。 – 2011-05-25 18:16:32

+0

我想我最終會做的是將整個頁面渲染爲Web瀏覽器控件,並將背景設置爲我的主題。 (我完全控制了我正在渲染的網站,因此我只需添加一些CSS以使其與主題相匹配)。 – Woody 2011-05-25 18:51:20

3

作爲嘗試加載一些初始內容以設置webbrowser控件顯示顏色以匹配頁面背景(或可能除此之外)的替代方法您可以將控件的不透明度設置爲0,然後在控件的Navigated事件第一次觸發時將其更改爲1。

0

代碼解決方案:

private void SetHtml(WebBrowser browser, string body) 
{ 
    string style = "<style>"; 
    string background = GetColorForCss("PhoneBackgroundColor"); 
    string foreground = GetColorForCss("PhoneForegroundColor"); 
    style += "body{background-color: " + background + "; color: " + foreground + ";}";    
    style += "</style>"; 
    string html = "<!DOCTYPE html><html><head>" + style + "</head><body>" + body + "</body></html>"; 

    Color phoneBackground = (Color)Application.Current.Resources["PhoneBackgroundColor"]; 
    browser.Background = new SolidColorBrush(phoneBackground); 
    browser.Opacity = 0; 
    browser.NavigateToString(html); 
    browser.LoadCompleted += browser_LoadCompleted; 


} 

void browser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{ 
    _browser.OpacityMask = null; 
    _browser.Opacity = 1; 
} 
0

你可以風格的web瀏覽器組件顯示HTML內容,因此該組件將您的應用程序

  web_browser.NavigateToString(html: "<html style='background-color:" + BACKGROUND_THEME_COLOR + ";color:" + FOREGROUND_THEME_COLOR + ";font-size:15pt;'>" + your_html_content + "</html>");