首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 開發 WPF/Silverlight 動畫與遊戲教學 (43-4):右鍵快捷魔法選單實現

     編輯:關於C語言

右鍵魔法快捷選單:WrapPanel 動態生成與交互邏輯

實現類《暗黑破壞神》風格的右鍵魔法選擇介面:點擊右鍵圖標彈出已學會法術列表,選擇後更新主角預設魔法與圖標顯示。

核心實現代碼

// 右鍵魔法選擇邏輯
rightButtonMagicIcon.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e) {
    if (rightButtonMagicList == null) {
        rightButtonMagicList = new WrapPanel() {
            Orientation = Orientation.Horizontal,
            Width = 270  // 每行 10 個圖標 (27px × 10)
        };
        
        foreach (Magic magic in availableMagic) {
            QXIcon magicIcon = new QXIcon(IconTypes.Highlights) {
                BodySource = new ImageBrush() { ImageSource = Super.GetImage(string.Format("/Image/Magic/{0}/0.png", magic.Code)) },
                NewSource = new ImageBrush() { ImageSource = Super.GetImage("/Image/Icon/34.png") },
                Width = 27,
                Height = 27,
                Tip = magic.Name,
                Tag = magic,
            };
            
            magicIcon.MouseLeftButtonDown += delegate(object ss, MouseButtonEventArgs ee) {
                QXIcon icon = ss as QXIcon;
                Magic m = icon.Tag as Magic;
                rightButtonMagicIcon.BodySource = icon.BodySource;
                rightButtonMagicIcon.Tip = m.Name;
                Leader.CurrentMagic.Code = m.Code;
                Leader.CurrentMagic.Level = m.Level;
                rightButtonMagicList.Visibility = Visibility.Collapsed;
                ee.Handled = true;
            };
            
            rightButtonMagicList.Children.Add(magicIcon);
        }
        
        BottomMenu.Children.Add(rightButtonMagicList);
        Canvas.SetLeft(rightButtonMagicList, 437);
        Canvas.SetTop(rightButtonMagicList, -Math.Ceiling(rightButtonMagicList.Children.Count / (rightButtonMagicList.Width / 27)) * 27);
    } else {
        if (rightButtonMagicList.Visibility == Visibility.Collapsed) {
            rightButtonMagicList.Visibility = Visibility.Visible;
            Canvas.SetTop(rightButtonMagicList, -rightButtonMagicList.ActualHeight);
        } else {
            rightButtonMagicList.Visibility = Visibility.Collapsed;
        }
    }
    e.Handled = true;
};

關鍵技術點

  1. WrapPanel 自動換行:固定寬度 270px,超過 10 個圖標自動換行
  2. 動態定位:根據行數計算顯示位置,確保選單向上彈出不超出邊界
  3. 狀態切換:顯示/隱藏切換而非重複建構,效能最佳
  4. 資料綁定:Tag 屬性攜帶 Magic 物件,點擊時直接取用
右鍵魔法選單效果
圖 1:右鍵魔法選單展開效果
多行魔法選單效果
圖 2:增加魔法後自動換行多行顯示

主介面選單雛形已成,後續將完善各功能面板,敬請關注。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved