精通Silverlight——12.1.1 聲明 x:Class, 定義事件處理

精通Silverlight——12.1.1  聲明 x:Class, 定義事件處理

使用VS2008創建Silverlight項目時,x:Class自動被指定爲:項目名稱.Page,程序集被指定爲ClientBin/項目名稱.dll,通常不需要更改默認的設置。

Loaded屬性指定了Page類的Loaded事件名稱,在後置代碼中,自動創建了一個Page_Loaded事件名稱,與Loaded的屬性設置相對應,如下所示。

public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

        }

Loaded屬性與x:Class不同的是,Loaded不一定非要定義在XAML中。下面的代碼爲Page類添加了一個構造函數,並將Loaded事件關聯到Page_Loaded

        public Page()

        {

            this.Loaded+=new EventHandler(Page_Loaded);

        }

        public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

        }

如果需要爲其他圖形對象添加事件,比如鼠標移動,鍵盤輸入時,一般建議的作法是在Page_Load中添加事件訂閱代碼。

例如在畫布中,聲明一個矩形,代碼如下所示。

  <Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100" x:Name="Rec1"></Rectangle>

注意:必須指定x:Name屬性,以便於在代碼文件中直接訪問,爲了給這個矩形添加事件,通常是在Page_Load區的InitializeComponent方法的下面添加事件訂閱代碼,可藉助於VS2008的智能感知功能。

有時候可能智能感知功能並不能立刻反映出在XAML文件中所做的變化,可以通過全部保存或者編譯一次來獲得智能感知。

Page_Loaded區中,藉助於智能提示功能,添加如下的代碼框架。

       public void Page_Loaded(object o, EventArgs e)

        {

            // Required to initialize variables

            InitializeComponent();

            Rec1.MouseEnter += new MouseEventHandler(Rec1_MouseEnter);

        }

        void Rec1_MouseEnter(object sender, MouseEventArgs e)

        {

            //在這裏將要添加代碼

        }

可以在出現如圖12.1所示的提示時按兩下Tab鍵,由VS2008來自動生成代碼框架。

12.1  VS2008智能完成

當然還可以直接在XAML中添加事件,如下面的代碼所示。

<Rectangle Canvas.Left="100" Canvas.Top="100" Width="100" Height="100" x:Name="Rec1" MouseEnter="MouseEnter"></Rectangle>

這樣就不必再在Page_Loaded中訂閱事件了。

注意Page_Loaded事件中的InitializeComponent方法,與ASP.NET項目一樣,當在XAML中添加新對象後,在該方法中就會用.NET語法定義這些對象,以便於開發人員直接在後置代碼中訪問。

如果按F12鍵追蹤該方法,會看到剛剛定義的Rec1原來是定義在InitializeComponent方法中,並且使用瞭如下的代碼。

  Rectangle Rec1;

    private void InitializeComponent()

    {

      Rec1= this.FindName("Rec1") as Rectangle;

     

    }

這段代碼的意思是在根畫布中,也就是Page類中,查找名爲Rec1的對象,並轉換爲Rectangle。這樣在代碼文件中就可以直接使用Rec1了。

必須注意的是,InitializeComponent方法被定義在名爲Page.g.cs文件中,該文件會感知在XAML中所做的變更,並自動進行更新。而且在Page.g.cs也是一個局部類,最後都將被編譯到Page類中。

有了事件和代碼框架,也具有了可以直接引用的XAML對象,下面就可以爲事件編寫代碼了。

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