- Published on
Sonny.EasyRibbon - Framework Tạo Revit Ribbon UI Đơn Giản Với C# Attributes
- Authors

- Name
- Phan Cong Vu Duc
Giới thiệu
Nếu bạn đã từng lập trình Revit Add-in, chắc hẳn bạn sẽ không xa lạ gì với việc phải viết hàng trăm dòng code chỉ để tạo một Ribbon UI đơn giản. Chính vì vậy, mình đã phát triển Sonny.EasyRibbon - một framework mã nguồn mở giúp đơn giản hóa quá trình tạo Revit Ribbon UI bằng cách sử dụng C# Attributes. Thay vì viết hàng trăm dòng code, giờ đây bạn chỉ cần vài dòng attribute là có thể tạo được một giao diện Ribbon đẹp mắt và chuyên nghiệp.
Vấn đề với cách làm truyền thống
Khi tạo Revit Ribbon UI theo cách truyền thống, bạn phải viết rất nhiều code boilerplate chỉ để tạo một button đơn giản:
// Traditional way - verbose and hard to maintain
public Result OnStartup(UIControlledApplication application)
{
string tabName = "My Tools";
application.CreateRibbonTab(tabName);
RibbonPanel panel = application.CreateRibbonPanel(tabName, "Design Tools");
PushButtonData buttonData = new PushButtonData(
"ColumnRebar",
"Column Rebar",
Assembly.GetExecutingAssembly().Location,
"MyAddin.Commands.ColumnRebarCommand"
);
buttonData.Image = new BitmapImage(new Uri("pack://application:,,,/MyAddin;component/Resources/Icons/icon16.png"));
buttonData.LargeImage = new BitmapImage(new Uri("pack://application:,,,/MyAddin;component/Resources/Icons/icon32.png"));
buttonData.ToolTip = "Generate column reinforcement";
PushButton button = panel.AddItem(buttonData) as PushButton;
// And this is just for ONE button...
return Result.Succeeded;
}
Code như vậy rất dài dòng và khó maintain khi có nhiều buttons.
Sonny.EasyRibbon - Giải pháp đơn giản và thanh lịch
Với Sonny.EasyRibbon, bạn chỉ cần viết:
using EasyRibbon.UIAttributeBase;
[Tab("My Tools")]
public class MyToolsTab
{
[Panel("Design Tools")]
public class DesignPanel
{
[Button("Column Rebar",
typeof(ColumnRebarCommand),
Image = "/MyAddin;component/Resources/Icons/icon16.png",
LargeImage = "/MyAddin;component/Resources/Icons/icon32.png",
ToolTip = "Generate column reinforcement")]
public class ColumnRebarButton;
}
}
Chỉ vậy thôi! Code ngắn gọn, dễ đọc, dễ hiểu và dễ maintain hơn rất nhiều.

Tính năng nổi bật
- 🎯 Attribute-Based UI Definition - Định nghĩa giao diện Ribbon thông qua C# Attributes, cách tiếp cận hiện đại và declarative
- 🧩 Modular Architecture - Tổ chức nhiều add-ins thành các modules độc lập, có thể load và debug riêng biệt
- 🔄 Multi-Version Support - Hỗ trợ Revit từ phiên bản 2021 đến 2026
- 🌐 Resource-Based Localization - Hỗ trợ đa ngôn ngữ thông qua WPF ResourceDictionary
- 📦 Stacked Buttons & Pulldown Buttons - Hỗ trợ đầy đủ các loại UI elements của Revit Ribbon
So sánh trước và sau
| Trước khi dùng EasyRibbon | Sau khi dùng EasyRibbon |
|---|---|
| 200+ dòng code cho 5 buttons | Chỉ 30-40 dòng code |
| Code dài dòng, khó đọc | Code ngắn gọn, dễ đọc |
| Khó maintain và mở rộng | Dễ dàng maintain và mở rộng |
| Mất nhiều thời gian | Tiết kiệm thời gian đáng kể |
Kết luận
Sonny.EasyRibbon giúp đơn giản hóa quá trình phát triển Revit Add-in. Thay vì viết hàng trăm dòng boilerplate code, bạn có thể tập trung vào logic nghiệp vụ thực sự. Framework này đặc biệt hữu ích cho developers mới bắt đầu, teams làm việc với nhiều add-ins, và các projects cần maintain lâu dài.
Để tìm hiểu chi tiết về cách sử dụng, các tính năng, và examples, vui lòng xem README trên GitHub repository:
🔗 GitHub Repository: https://github.com/PhanCongVuDuc/Sonny.EasyRibbon
Nếu bạn thấy project hữu ích, hãy cho một ⭐ star trên GitHub nhé! Mọi đóng góp đều được chào đón qua GitHub Issues, Pull Requests hoặc LinkedIn.
Happy Coding with Sonny.EasyRibbon! 🚀