為滿足遊戲中物品圖標、技能圖標、選項卡等多樣化需求,將 QXIcon 重構為支援三種模式的統一控件,大幅減少美術素材與程式碼重複。
public enum IconTypes {
None = 0, // 普通圖標
Transform = 1, // 圖片切換模式 (懸停換圖)
Highlights = 2 // 高亮遮罩模式 (疊加半透明層)
}
public QXIcon(IconTypes iconTypes) {
InitializeComponent();
switch (iconTypes) {
case IconTypes.Transform:
this.MouseEnter += delegate { Container.Background = NewSource; };
this.MouseLeave += delegate { Container.Background = _BodySource; };
break;
case IconTypes.Highlights:
Rectangle mask = new Rectangle() { Visibility = Visibility.Collapsed };
Container.Children.Add(mask);
this.MouseEnter += delegate {
mask.Width = this.Width;
mask.Height = this.Height;
mask.Fill = NewSource;
mask.Visibility = Visibility.Visible;
};
this.MouseLeave += delegate { mask.Visibility = Visibility.Collapsed; };
break;
}
}
Brush _BodySource;
public Brush BodySource {
get { return _BodySource; }
set { Container.Background = _BodySource = value; }
}
public Brush NewSource { get; set; } // 切換圖/遮罩筆刷
| 模式 | 適用場景 | 資源優勢 |
|---|---|---|
| None | 靜態圖標、純顯示用途 | 零額外開銷 |
| Transform | 按鈕狀態切換、技能冷卻遮罩 | 需準備兩張圖片 |
| Highlights | 物品/技能滑鼠懸停高亮 | 單一遮罩筆刷複用所有圖標,節省素材空間 |
Highlights 模式亮點:一張半透明遮罩筆刷即可實現所有尺寸一致圖標的高亮效果,美術無需為每個圖標繪製高亮版本,開發無需管理大量圖片資源。
統一採用自定義 ControlTemplate,移除預設邊框與背景,實現前文所述的自適應圓角黑色半透明風格。