Windows Phone 7開發技巧【1】——修改Webbrowser控件背景顏色和防止加載過程中的閃爍


大家知道,在WP7開發中,WebBrowser控件的功能很好很強大。基本應用中,用來顯示長文本是很不錯的選擇,特別是網頁抓取內容的顯示。高級應用中,可以使用html/css/js打造炫酷的效果。園子里關於WebBrowser的好文章很多,值得學習。我這里分享WebBrowser開發中遇到的兩則小技巧,屬於WebBrowser控件的基本應用,希望對大家有所幫助。

一、使用WebBrowser

Xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <phone:WebBrowser Name="webBrowser" Margin="12,0,0,0"/>
</Grid>

代碼

    public partial class MainPage : PhoneApplicationPage
    {
        // 構造函數
        public MainPage()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            string content = @"If you shed tears when you miss the sun, you also miss the stars.";
            string rawHtml = "";
            rawHtml += "<html><body>";
            rawHtml += content;
            rawHtml += "</body><html>";
            webBrowser.NavigateToString(rawHtml);
        }
    }

WebBrowser控件的背景顏色默認為白色,在控件屬性中無法修改。若應用的整體背景色是黑色,WebBrowser控件則顯得不協調,那么如何修改其顯示呢?

二、修改WebBrowser控件背景顏色

大家知道,WebBrowser控件其實就是一個瀏覽器頁面,該頁面的顯示無疑也可由html來控制,說到這里大家也許已經知道了:使用bgcolor屬性來控制背景顏色。

代碼:

        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            string content = @"If you shed tears when you miss the sun, you also miss the stars.";
            string rawHtml = "";
            if (IsThemeDark())
            {
                rawHtml += "<html><body bgcolor=\"#000000\"><p>";
            }
            else
            {
                rawHtml += "<html><body bgcolor=\"#FFFFFF\">";
            }
            rawHtml += content;
            rawHtml += "</p></body></html>";
            webBrowser.NavigateToString(rawHtml);
        }

        private bool IsThemeDark()
        {
            Visibility darkBackgroundVisibility = (Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"];
            return darkBackgroundVisibility == Visibility.Visible;
}

 使用IsThemeDark來判斷當前Application的默認背景顏色是不是黑色,保持WebBrowser控件背景顏色與App默認背景色一致。事例App采用默認的黑色背景,運行,發現烏黑一片,泰戈爾沒了蹤影,咋回事呢?原來WebBrowser死性難改,字體顏色還是黑色,好在咱還稍微懂點html,繼續:

        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            string content = @"If you shed tears when you miss the sun, you also miss the stars.";
            string rawHtml = "";
            if (IsThemeDark())
            {
                rawHtml += "<html><body bgcolor=\"#000000\"><p>";
                rawHtml += "<font color=\"#FFFFFF\">";
            }
            else
            {
                rawHtml += "<html><body bgcolor=\"#FFFFFF\"><p>";
                rawHtml += "<font color=\"#000000\">";
            }
            rawHtml += content;
            rawHtml += "</p></font></body></html>";
            webBrowser.NavigateToString(rawHtml);
        }

代碼片段將文本顏色修改為WebBrowser控件背景顏色的反色。

如果你跟着筆者一起運行了以上代碼,你會發現WebBrowser控件在加載過程中閃爍了一下,白色的背景一閃而過,看來江山易改,本性難移。怎么能讓WebBrowser控件不要露出白色“獠牙”呢?

三、防止WebBrowser控件加載過程中的閃爍

大致分析一下發生閃爍產生的原因。WebBrowser控件自身的背景顏色是白色,加載咱們的html后,背景被修改為黑色。那么在WebBrowser控件顯示以后,加載html完成之前,WebBrowser控件將呈現白色。這段時間比較短暫,但還是被我們靈敏的眼睛捕捉到了。原因清晰了,我們來考慮解決的方法:我們想要的是加載html完成后的WebBrowser,之前他是什么樣子,我們不care,既然不care,干脆隱藏掉好了,相比各位又猜出十之八九了。

Xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <phone:WebBrowser Name="webBrowser" Margin="12,0,0,0" Opacity="0" LoadCompleted="WebBrowser_LoadCompleted"/>
</Grid>

設置WebBrowser控件的Opacity屬性為0,將其默認隱藏。處理LoadCompleted事件。

代碼

        private void WebBrowser_LoadCompleted(object sender, NavigationEventArgs e)
        {
            webBrowser.Opacity = 1;
        }

響應LoadCompleted事件,WebBrowser控件加載完畢后,才將其顯示出來。運行,效果不錯,整個世界清靜了。

 四、總結

這里分享的設置背景顏色和防止閃爍,只是WebBrowser應用中遇到的基礎問題,例如還有加載中文時亂碼等其他問題,可以到園子里搜一下其他文章。已經說了,WebBrowser功能很好很強大,特別地,芒果增加了對HTML5的支持,開發者可以使用HTML5技術基於WebBrowser打造更個性化的Native應用。更重要的是,基於HTML5的開發是跨平台的。已有不少開源項目支持了WP7,例如JQuery.Mobile,PhoneGap等。大家有空不妨一試。

代碼下載

(全文完)

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM