精通Silverlight——11.3.2 XAML代碼的錯誤處理

  有時候會遇到一些XAML代碼解析錯誤,比如當XAML代碼出現錯誤時,還是能夠通過編輯,但是在解析該XAML代碼時會彈出一些奇怪的錯誤提示,如圖11.13所示。

11.13  XAML解析錯誤

由上圖可以發現,這是一個JavaScript應用程序錯誤,在HTML文件的後置JavaScript文件中,createSilverlight方法用於創建Silverlight插件,該方法提供了一個OnError事件,可以處理Silverlgiht解析錯誤、運行時錯誤以及其他類型的錯誤。

爲了定義這個事件,首先打開TestPage.html.js文件,爲CreateSilverlight函數添加OnError事件,代碼如下所示。

//contains calls to silverlight.js, example below loads Page.xaml

function createSilverlight()

{

         Silverlight.createObjectEx({

                   source: "Page.xaml",

                   parentElement: document.getElementById("SilverlightControlHost"),

                   id: "SilverlightControl",

                   properties: {

                            width: "100%",

                            height: "100%",

                            version: "1.1",

                            enableHtmlAccess: "true"

                   },

                   //添加一個處理錯誤的事件處理代碼,注意在Silverlight1.1中,這個事件處理名稱不能是字符串。

                   //否則瀏覽器會提示一個JavaScript錯誤

                   events: {onError:OnErrorEventHandler} // Set the onError handler.

         });        

         // Give the keyboard focus to the Silverlight control by default

    document.body.onload = function() {

      var silverlightControl = document.getElementById('SilverlightControl');

      if (silverlightControl)

      silverlightControl.focus();

    }

}

代碼在events中定義了onError事件,與Silverlight 1.0不同的是,這裏的事件處理函數名稱不應該是一個字符串。否則瀏覽器會提示錯誤。

接下來定義OnErrorEventHandler的事件處理代碼,如下所示。

function OnErrorEventHandler(sender, errorArgs)

{

    // 顯示錯誤消息

    var errorMsg = "Silverlight Error: /n/n";

    errorMsg += "Common Error Info:/n/n ";

    //通用錯誤信息

    errorMsg += "Error Type:    " + errorArgs.errorType + "/n";

    errorMsg += "Error Message: " + errorArgs.errorMessage + "/n";

    errorMsg += "Error Code:    " + errorArgs.errorCode + "/n";   

    // 通過判斷錯誤的類型來產生錯誤信息

    switch(errorArgs.errorType)

    {

        case "RuntimeError":

            // 顯示RuntimeErrorEventArgs的特定屬性

            if (errorArgs.lineNumber != 0)

            {

                errorMsg += "Line: " + errorArgs.lineNumber + "/n";

                errorMsg += "Position: " +  errorArgs.charPosition + "/n";

            }

            errorMsg += "MethodName: " + errorArgs.methodName + "/n";

            break;

        case "ParserError":

            // 顯示ParserErrorEventArgs的特定屬性

            errorMsg += "Xaml File:      " + errorArgs.xamlFile      + "/n";

            errorMsg += "Xml Element:    " + errorArgs.xmlElement    + "/n";

            errorMsg += "Xml Attribute:  " + errorArgs.xmlAttribute  + "/n";

            errorMsg += "Line:           " + errorArgs.lineNumber    + "/n";

            errorMsg += "Position:       " + errorArgs.charPosition  + "/n";

            break;

        default:

            break;

    }

    // 彈出錯誤

    alert(errorMsg);

}

現在運行程序,則會彈出剛纔所定義的錯誤窗口,如圖11.14所示。

11.14  定製的錯誤提示

同樣,讀者也可以發揮想象力來訂製錯誤的提示,一個問題是不支持中文,希望在Silverlight的後續版本中能夠得到改進。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章