拉個RibbonControl
在某個Page裡放個Group
然後接者我們要動態在Group裡產生RibbonGalleryBarItem
假設這個Group命名為mySkin
只要在主要的程式呼叫下面的InitSkinGallery()就好啦
最好是放在建構子的InitializeComponent();下面
public void InitSkinGallery()
{
RibbonGalleryBarItem rgbiSkins = new RibbonGalleryBarItem(ribbonControl1.Manager);
GalleryItemGroup itemGroup1 = new GalleryItemGroup();
itemGroup1.Caption = "Main";
rgbiSkins.Gallery.Groups.Add(itemGroup1);
SimpleButton imageButton = new SimpleButton();
//將你目前有的Skin都讀進來
foreach (SkinContainer cnt in SkinManager.Default.Skins)
{
imageButton.LookAndFeel.SetSkinStyle(cnt.SkinName);
GalleryItem gItem = new GalleryItem();
int groupIndex = 0;
rgbiSkins.Gallery.Groups[groupIndex].Items.Add(gItem);
gItem.Caption = cnt.SkinName;
gItem.Image = GetSkinImage(imageButton, 32, 17, 2);
gItem.HoverImage = GetSkinImage(imageButton, 70, 36, 5);
gItem.Caption = cnt.SkinName;
gItem.Hint = cnt.SkinName;
}
rgbiSkins.Gallery.AllowHoverImages = true;
rgbiSkins.Gallery.FixedHoverImageSize = false;
rgbiSkins.Gallery.ItemClick += new DevExpress.XtraBars.Ribbon.GalleryItemClickEventHandler(rgbiSkins_Gallery_ItemClick);
ribbonControl1.Pages[0].Groups["mySkin"].ItemLinks.Add(rgbiSkins);
}
public Bitmap GetSkinImage(SimpleButton button, int width, int height, int indent)
{
Bitmap image = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage(image))
{
StyleObjectInfoArgs info = new StyleObjectInfoArgs(new GraphicsCache(g));
info.Bounds = new Rectangle(0, 0, width, height);
button.LookAndFeel.Painter.GroupPanel.DrawObject(info);
button.LookAndFeel.Painter.Border.DrawObject(info);
info.Bounds = new Rectangle(indent, indent, width - indent * 2, height - indent * 2);
button.LookAndFeel.Painter.Button.DrawObject(info);
}
return image;
}
private void rgbiSkins_Gallery_ItemClick(object sender, DevExpress.XtraBars.Ribbon.GalleryItemClickEventArgs e)
{
//按下去按鈕後就更換Skin了
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle(e.Item.Caption);
}
下面補上要用到的NameSpace(我全部貼上了,有的沒用到,懶的分=.=)
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Layout;
using DevExpress.Skins;
using DevExpress.XtraBars.Ribbon;
using DevExpress.Utils.Drawing;
using DevExpress.XtraBars;