程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(四十四)(1)

C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(四十四)(1)

編輯:關於C語言

C#開發WPF/Silverlight動畫及游戲系列教程(Game Tutorial):(四十四)制作主角屬性面板及加點器

游戲中會使用大量的菜單面板,而這些面板往往都帶有選項卡。如果用Silverlight工具中的TabControl,則需要通過復雜的xaml重寫模板來實現自定義樣式,這一點時常讓開發者頭疼,畢竟界面的東西應該屬於美工的范疇,這也是我所發現在目前Silverlight中唯一一處只能通過xaml而無法用代碼實現的地方。當然,如果您對此特別感興趣,同樣可以到http://www.codeplex.com/Silverlight中下載最新的開源工具源碼,其中的示例項目中有非常詳細的模板重寫案例。本節,我將通過創建用戶控件的方式來創建自定義的TabControl和RepeatButton,實現主角屬性面板及其中的屬性加點器。

首先,我創建一個QXTabControl用戶控件,該控件界面可以很簡單,只需要包含一個頭和一個身體即可:

<UserControl x:Class="QXGameEngine.Control.QXTabControl"
XMLns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
XMLns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 <Canvas>
   <StackPanel x:Name="Head"/>
   <ContentPresenter x:Name="Body"/>
 </Canvas>
< /UserControl>

Head 用做TabItem的容器,作為StackPanel類型控件,它可以對內部控件進行橫排或豎排,從而基本滿足大多數情況需要;而Body是ContentPresenter類型,在第四十二節中我曾提及過它,相當於一個萬用變身控件,將它作為選項卡的身體部分再合適不過了。當我們點擊不同的選項卡時,將不同的面板控件作為值賦予給Body,輕松實現高度自由的選項內容變換。

那麼用什麼控件來替代TabItem呢?在《劍俠世界》中,選項卡做得別具特色,不光在默認情況下鼠標進入與離開會呈現不同的圖片;當被點中後,同樣實現另外的兩張圖片間的切換。這樣的效果相當精致,而我們又該如何將它實現呢?此時,不得不想到我們可愛的QXIcon控件,我為它添加了新的類型:IconTypes.HitModes,定義很簡單,根據該控件是否被點擊從而對4張圖片進行相應切換:

case IconTypes.HitModes:
 this.MouseEnter += (s, e) => { Container.Background = Hit ? HitNewBodySource : NewSource; };
 this.MouseLeave += (s, e) => { Container.Background = Hit ? HitBodySource : _BodySource; };
 this.MouseLeftButtonDown += (s, e) => { Hit = Hit ? false : true; };
break;

實現後的效果如下圖:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved