XAML一些控件的使用

  這節來講一些XAML中常用控件的使用。

 

Window

    Window控件是一個基礎,它是其它控件的容器,我們可以通過修改其中的一些屬性來設置窗體的顯示效果,下面說一些最常用的屬性:

    WindowStartupLocation 這個屬性用來設置窗體啟動時的位置,他有三個值:CenterOwner,CenterScreen,Manual。CenterOwner 是指在這個窗體的擁有者中心顯示,我們可以通過後台通過代碼來指定當前窗體的擁有者是誰:

    當在MainWindowBase中點擊按鈕時,就會彈出MainWindow頁面,效果如下:

    CenterScreen是啟動時在屏幕正中間,Manual 是默認,大約在屏幕左上角的位置。

    WindowStyle 設個屬性用來設置窗體的風格,它有四個值:None,SingleBorderWindow,ThreeDBorderWindow,ToolWindow。SingleBorderWindow是默認值,就是默認啟動的樣子,ThreeDBorderWindow是3D邊框,在win10中已經和SingleBorderWindow樣式一致了,None是無邊框,啟動時如下:

圖片

    ToolWindow是專門用於顯示設置窗體的,沒有最大最小化按鈕,只有關閉按鈕:

    WindowState 這個屬性用來設置窗體啟動時是最大化還是最小化,它有三個值:默認大小Normal,就是用戶通過width和height定義的大小,Minimized 啟動時最小化,Maximized 啟動時最大化。

    一般情況下,我們要做一個好看的窗體,使用微軟給我們定義好的樣式是不夠的,我們會將窗體樣式設置為None,然後自己去定義標題欄,但是當設置為None時,頂部還有一條白色的框,如下:

 

 

 

    為了去掉它,我們還要用到window的另一個屬性:AllowsTransparency 它用來設置窗體是否可以透明,這是個bool屬性,設置為true,窗體就允許透明,上邊這條白框就透明看不到了。

    當窗體樣式設為None時,因為標題欄被隱藏,我們無法移動窗體,為了使窗體可以移動,我們要為window中的布局控件添加MouseDown事件的事件處理器,並且要為其設置一個背景(window設置為允許透明,當grid沒有背景時是無法觸發MouseDown事件的),然後在後台添加如下的代碼:

private void Grid_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e){
if (e.ChangedButton == System.Windows.Input.MouseButton.Left)
  {
   DragMove();//window 內部的移動方法
  }
}

    這樣我們在Grid控件的空白區域上鼠標左鍵按下時,就可以拖動窗體進行移動。

 

Grid

    下面來說一下最常用的布局控件:Grid。

   它最強大的功能在於分割區域:我們可以使用Grid的ColumnDefinitions 和 RowDefinitions來分割Grid

圖片

    請看上述代碼,我將Grid分割了3行,3列。當值後邊帶” * “號時,是按比例劃分,純數字就是按像素劃分,這兩者是可以混用的。

    拿上述例子解釋說:列是1*,50像素,1*這樣劃分的,如果grid寬200像素,那麼中間這一列是50像素,兩邊這兩列各占剩餘的二分之一,也就是75像素。行劃分規則也是如此。

    劃分好了以後,我們在Grid子控件中就可以通過Grid.Row=”index” Grid.Column=”index” 來指定控件顯示在哪個區域,區域的index標識是從0開始的,如果控件不指定Row和Column,則默認顯示在第一行第一列:

圖片

    如圖,我將按鈕的Row和Column設置為1,也就是第二行第二列,顯示效果如下:

    因為只有50個像素寬,按鈕是顯示不全的,在開發中,為了更好的查看Grid的劃分,我們可以藉助Grid的bool屬性ShowGridLines,讓Grid顯示分割線,效果如下:

    這樣就會很方便的調整劃分大小,想查看正式效果直接將ShowGridLines去掉或改為False即可。VS是支持對WPF進行熱重載的,當我們改變xaml代碼,運行界面也會一併修改,但如果是引入一些新資源代碼等無法實現熱重載的情況,必須要重新啟動程序。

 

StackPanel和Border

    StackPanel是棧布局,放置其中的控件只能像堆碟子一樣,水平排列或者垂直排列,我們可以通過其Orientation屬性來設置豎排還是橫排,它有兩個值:Horizontal 是水平排列,Vertical 是垂直排列。

    Border 常用於簡單的布局,它的內部只允許有一個直接子控件,一般用於包裹Grid,對Grid加一些邊框性的美化,實際上它的名字就告訴了我們它的用途。

 

 

Tags: