DevExpress Skins<2>
Skins
DevExpress WinForms控件包括許多現成的繪畫主題(或外觀),用于更改DevExpress表單和控件的外觀。您可以通過運行WinForms演示應用程序并使用外觀選擇器在可用主題之間進行切換來查看不同的外觀。
Vector Themes
矢量皮膚將矢量圖像用于所有UI元素,以提高在高分辨率設備上的顯示質量。
Basic
Bezier
Office 2019 Black
Office 2019 Colorful
Office 2019 Dark Gray
Office 2019 White
每個vector ski可以具有作為膚色主題的多個調色板(色板)。RibbonControl提供了“ Skin Palette Gallery”(皮膚調色板庫)項,允許用戶在運行時切換調色板。
以下代碼說明了如何修改默認調色板和/或創建其他調色板:
//obtain a vector skin
var commonSkin = CommonSkins.GetSkin(LookAndFeel);
//create a new palette
SvgPalette svgPalette = new SvgPalette();
//set up palette colors
svgPalette.Colors.Add(new SvgColor("Paint", Color.FromArgb(242, 242, 242)));
svgPalette.Colors.Add(new SvgColor("Paint High", Color.FromArgb(255, 255, 255)));
svgPalette.Colors.Add(new SvgColor("Paint Shadow", Color.FromArgb(222, 222, 222)));
svgPalette.Colors.Add(new SvgColor("Brush", Color.FromArgb(80, 80, 80)));
svgPalette.Colors.Add(new SvgColor("Brush Light", Color.FromArgb(150, 150, 150)));
svgPalette.Colors.Add(new SvgColor("Brush High", Color.FromArgb(80, 80, 80)));
svgPalette.Colors.Add(new SvgColor("Brush Major", Color.FromArgb(180, 180, 180)));
svgPalette.Colors.Add(new SvgColor("Brush Minor", Color.FromArgb(210, 210, 210)));
svgPalette.Colors.Add(new SvgColor("Accent Paint", Color.FromArgb(23, 107, 209)));
svgPalette.Colors.Add(new SvgColor("Accent Paint Light", Color.FromArgb(191, 224, 255)));
svgPalette.Colors.Add(new SvgColor("Accent Brush", Color.FromArgb(255, 255, 255)));
svgPalette.Colors.Add(new SvgColor("Accent Brush Light", Color.FromArgb(81, 148, 224)));
svgPalette.Colors.Add(new SvgColor("Key Paint", Color.FromArgb(71, 71, 71)));
svgPalette.Colors.Add(new SvgColor("Key Brush", Color.FromArgb(255, 255, 255)));
svgPalette.Colors.Add(new SvgColor("Key Brush Light", Color.FromArgb(150, 150, 150)));
svgPalette.Colors.Add(new SvgColor("Red", Color.FromArgb(226, 54, 66)));
svgPalette.Colors.Add(new SvgColor("Green", Color.FromArgb(60, 146, 92)));
svgPalette.Colors.Add(new SvgColor("Blue", Color.FromArgb(58, 116, 194)));
svgPalette.Colors.Add(new SvgColor("Yellow", Color.FromArgb(252, 169, 10)));
svgPalette.Colors.Add(new SvgColor("Black", Color.FromArgb(122, 122, 122)));
svgPalette.Colors.Add(new SvgColor("Gray", Color.FromArgb(190, 190, 190)));
svgPalette.Colors.Add(new SvgColor("White", Color.FromArgb(255, 255, 255)));
//replace the default color palette with a custom one
commonSkin.SvgPalettes[Skin.DefaultSkinPaletteName].CustomPalette = svgPalette;
LookAndFeelHelper.ForceDefaultLookAndFeelChanged();
//or
//add a new swatch
commonSkin.CustomSvgPalettes.Add(new SvgPaletteKey(commonSkin.CustomSvgPalettes.Count, "PALETTE_NAME"), svgPalette);
Basic Raster Skin Set
基本柵格皮膚設置
下面的庫演示了默認外觀,它們是DevExpress.Utils庫的一部分(所有使用DevExpress WinForms控件的項目都需要該庫):
DevExpress Style
DevExpress Dark Style
Office 2016 Colorful
Office 2016 Dark
Office 2016 Black
Office 2013 White (skin name:Office 2013)
Office 2013 Dark Gray
Office 2013 Light Gray
Office 2010 Blue
Office 2010 Black
Office 2010 Silver
Visual Studio 2013 Blue
Visual Studio 2013 Dark
Visual Studio 2013 Light
Seven Classic
Visual Studio 2010 (Skin name: VS2010)
Additional Raster Themes
將DevExpress.BonusSkins程序集添加到您的項目中,以使用上述基本集中未包含的其他外觀。
Black
Blue
Caramel
Theme Skins
Pumpkin
Springtime
Summer (Skin name: Summer 2008)
Valentine
Xmas (Blue) (Skin name: Xmas 2008 Blue)
McSkin
Blueprint
Whiteprint
To access bonus skins at design time, select Register BonusSkins from the DefaultLookAndFeel component's smart tag. If this command is not available, then the bonus themes have already been registered. Certain DevExpress Project Templates automatically register bonus skins.
要在代碼中注冊額外的外觀,請首先確保您的項目引用了DevExpress.BonusSkins程序集。然后,在運行主應用程序表單之前,調用DevExpress.UserSkins.BonusSkins.Register方法。
namespace WindowsFormsApplication1 {
static class Program {
[STAThread]
static void Main() {
DevExpress.UserSkins.BonusSkins.Register();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
一旦注冊,您就可以應用獎勵皮膚。以下代碼將南瓜獎勵外觀設置為應用程序的默認外觀:
private void Form1_Load(object sender, EventArgs e) {
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("Pumpkin");
}
將主題應用于整個應用程序和單個控件
調用DevExpress項目設置頁面,然后選擇所需的主題以將其應用于整個應用程序。
或者,調用UserLookAndFeel.Default靜態對象的UserLookAndFeel.SetSkinStyle方法。
using DevExpress.LookAndFeel;
// ...
UserLookAndFeel.Default.SetSkinStyle("VS2010");
要在代碼中應用矢量外觀,請使用UserLookAndFeel.SetSkinStyle方法重載,該重載將SkinSvgPalette對象作為參數。此參數允許您將預定義的調色板(色板)應用于皮膚。
this.LookAndFeel.SetSkinStyle(SkinSvgPalette.Bezier.LeafRustle);
Form Title Bar and Border Skinning
默認情況下,DevExpress表單和消息框的皮膚帶有標題欄和邊框。
可以使用兼容性選項(請參閱版本兼容性:默認屬性值)或WindowsFormsSettings.DisableFormSkins方法來禁用默認標題欄皮膚。
相關API
WindowsFormsSettings.EnableFormSkins
WindowsFormsSettings.DisableFormSkins
為最終用戶提供運行時皮膚選擇器UI
DevExpress 工具欄和菜單以及功能區提供了預定義的皮膚選擇器項目-SkinBarSubItem和SkinRibbonGalleryBarItem-它們會自動填充可用的皮膚項目,并允許最終用戶隨時切換應用程序主題。
該SkinDropDownButtonItem和SkinPaletteRibbonGalleryBarItem皮膚選擇提供附加功能。
該SkinDropDownButtonItem顯示在下拉列表中可用的皮膚。與SkinBarSubItem不同,SkinDropDownButtonItem允許您通過名稱搜索特定皮膚并隱藏不需要的皮膚組。
所述SkinPaletteRibbonGalleryBarItem選擇顯示色板代替皮膚。如果傳統的柵格皮膚當前處于活動狀態,則將其隱藏。請注意,此項目僅在功能區控件中可用,并且不支持Bar Manager。
您可以在設計時使用功能區和工具欄智能標記創建所有這些外觀選擇器。
要更改外觀選擇器的項目標題和圖標,請處理靜態DevExpress.XtraBars.Helpers.SkinHelper.CreateGalleryItem事件。
SkinHelper.CreateGalleryItem += (s, e) => {
if(e.SkinName.Equals(MySkinName)) {
e.GalleryItem.Image = e.UseLargeIcons ? MyLargeIcon : MySmallIcon;
e.GalleryItem.HoverImage = MyLargeIcon;
e.GalleryItem.Caption = "Glacier";
}
};
您還可以手動獲取可用皮膚樣式的列表,并創建一個自定義UI元素以在它們之間進行切換。請參閱以下主題,以了解如何使用內置選擇器并創建自定義選擇器:
添加和自定義工具欄和菜單皮膚選擇器
添加和自定義Ribbon Gallery外觀選擇器
建立自定義的最終用戶皮膚選擇器
如何:對條形和色帶蒙皮項目進行本地化
Adjust Skin Colors
DevExpress外觀允許您修改其默認調色板。例如,您可以調整Office 2016 Colorful皮膚的默認顏色(基于MS Outlook顏色)以匹配其他MS Office應用程序的調色板。
您可以使用預定義的“混色器”對話框來調整DevExpress WinForms演示中的皮膚顏色,如下所示。
使用以下代碼在您的應用程序中調用此對話框:
using DevExpress.XtraEditors.ColorWheel;
//..
ColorWheelForm cwForm = new ColorWheelForm();
cwForm.Show();
您還可以在設計時或在代碼中自定義整個應用程序的外觀(使用DefaultLookAndFeel組件)或特定控件的外觀調色板(通過其LookAndFeel屬性)。
| Member | Description |
|---|---|
| UserLookAndFeel.SkinMaskColor | 指定原色或背景色。 |
| UserLookAndFeel.SkinMaskColor2 | 指定突出顯示顏色。 |
| UserLookAndFeel.SetSkinMaskColors | 允許您在一個呼叫中同時設置兩種顏色。 |
您可以在設計時訪問這些屬性。
調用下面的方法來調整代碼中的皮膚調色板。
UserLookAndFeel.Default.SetSkinMaskColors(Color.FromArgb(255, 60, 245, 60), Color.White);
外觀是一組位圖,字體和對齊方式設置,這些設置確定如何在所有可能的狀態(正常,熱跟蹤,選定等)下繪制控件元素。DevExpress設計人員使用外觀編輯器應用程序將外觀屬性與各個控件相關聯,并將此信息編譯到前面提到的外觀組件中。您可以從Visual Studio 的DevExpress菜單訪問“ 皮膚編輯器”應用程序,以修改皮膚以適合特定的公司樣式,或將皮膚重新打包為輕量級DLL。
創建新皮膚
導出并應用自定義皮膚
the Toolbar and Menu Skin Selector
您可以在應用程序的工具欄中添加外觀選擇器,以便最終用戶可以在運行時選擇外觀。
添加皮膚選擇器
Bars 提供了SkinBarSubItem對象,可在運行時切換應用程序的外觀。該項目是一個子菜單,顯示流行皮膚的列表以及“ Bonus Skins”和“ Theme Skins”以訪問其他子菜單。
在設計時,單擊“ [添加]”,然后從下拉菜單中選擇“皮膚菜單(SkinBarSubItem)”,以向工具欄添加子菜單。
添加所需的外觀項目后,無需手動實現其功能。單擊菜單項以自動應用相應的皮膚。
甲SkinBarSubItem目的是一種自動填充BarSubItem對象。要修改此菜單,請通過BarCustomContainerItem.ItemLinks集合遍歷所有項目,并將其自定義為常規的Bar Item Links。以下文檔部分說明了如何修改此外觀菜單。
請注意,代表各個外觀的鏈接是BarButtonItemLink類對象。子項目(“獎勵皮膚”和“主題皮膚”)是BarSubItemLink對象。
Hide Skins and Skin Groups
您可以手動隱藏外觀項目或子組。
創建要排除的皮膚名稱的字符串數組。您可以使用全名(例如“ Office 2016 Colorful”)或部分名稱(例如“ 2007”)。
string[] skinsToHide = { "Seven Classic", "DevExpress Style", "Dark", "2010", "2007", "Sharp" };
創建一個自定義方法,該方法將遍歷bar外觀子項目并刪除與數組中的值匹配的外觀。同樣,您可以隱藏帶有獎勵皮膚的子菜單。
private void HideSkins(string[] skinsToHide) {
for(var i = 0; i < skinBarSubItem1.ItemLinks.Count; i++) {
//Check regular button items
if(skinBarSubItem1.ItemLinks[i] is BarButtonItemLink) {
var item = skinBarSubItem1.ItemLinks[i];
foreach(var skin in skinsToHide) {
if(item.Caption.Contains(skin)) {
item.Visible = false;
}
}
}
//Check buttons nested in the "Bonus Skins" sub-menu
if(skinBarSubItem1.ItemLinks[i] is BarSubItemLink && skinBarSubItem1.ItemLinks[i].Caption == "Bonus Skins") {
BarSubItemLink group = (BarSubItemLink)skinBarSubItem1.ItemLinks[i];
for(var j = 0; j < group.Item.ItemLinks.Count; j++) {
var item = group.Item.ItemLinks[j];
foreach(var skin in skinsToHide) {
if(item.Caption.Contains(skin)) {
item.Visible = false;
}
}
}
}
//Hide theme skins
if(skinBarSubItem1.ItemLinks[i] is BarSubItemLink && skinBarSubItem1.ItemLinks[i].Caption == "Theme Skins") {
skinBarSubItem1.ItemLinks[i].Visible = false;
}
}
}
從Load事件處理程序中調用您的方法,以確保外觀子項目已初始化。
void ucBar_Load(object sender,EventArgs e){
HideSkins(skinsToHide);
}
Change Captions and Icons Manually
遍歷BarCustomContainerItem.ItemLinks集合,以手動更改外觀子項目中的項目標題或字形。這類似于用于隱藏特定皮膚和皮膚組的過程。
void ucBar_Load(object sender, EventArgs e) {
RenameSkins();
}
private void RenameSkins() {
for(var i = 0; i < skinBarSubItem1.ItemLinks.Count; i++) {
if(skinBarSubItem1.ItemLinks[i].Caption == "DevExpress Style") {
BarButtonItem parentItem = (BarButtonItem)skinBarSubItem1.ItemLinks[i].Item;
parentItem.Caption = "Default Skin";
parentItem.ImageUri.Uri = "Apply";
}
}
}
自定義Ribbon Gallery 皮膚選擇器
本文介紹了如何允許最終用戶在運行時使用嵌入式工具欄和菜單皮膚選擇器選擇皮膚。
添加功能區庫皮膚選擇器
A Ribbon 提供了一種 In-Ribbon gallery (SkinRibbonGalleryBarItem objects) 以允許最終用戶能夠改變應用程序的外觀在運行時。在此庫中,皮膚項目分為"Standard Skins"*, "Bonus Skins" and "Theme Skins" 類別。
要添加功能區皮膚庫,請右鍵單擊RibbonPageGroup,然后選擇“添加皮膚庫(SkinRibbonGalleryBarItem)”。
添加所需的外觀項目后,無需手動實現其功能。單擊圖庫項目以自動應用相應的皮膚。
由于功能區外觀庫是自動填充的內部功能區庫,因此您可以輕松訪問其項目和組以對其進行修改–如下所述。
Hide Specific Items And Groups
創建一個包含不需要的皮膚名稱的字符串數組。這些名稱可以是全名(例如“ Office 2016 Colorful”)或部分名(例如“ 2007”)。
string[] skinsToHide = { "Seven Classic", "DevExpress Style", "Dark", "2010", "2007", "Sharp" };
定義一個自定義方法,該方法將遍歷皮膚項并隱藏不需要的項。
private void HideSkins(string[] skinsToHide) {
for(var i = 0; i < skinRibbonGalleryBarItem1.Gallery.Groups.Count; i++) {
var group = skinRibbonGalleryBarItem1.Gallery.Groups[i];
if(group == null) {
continue;
}
for(var j = 0; j < group.Items.Count; j++) {
var item = group.Items[j];
if(item == null) {
continue;
}
foreach(var skin in skinsToHide) {
if(item.Caption.Contains(skin)) {
item.Visible = false;
}
}
}
}
}
使用窗體或UserControl Load事件處理程序來調用您的方法。
this.Load += ucRibbon_Load;
void ucRibbon_Load(object sender, EventArgs e) {
HideSkins(skinsToHide);
}
要隱藏整個皮膚組,請使用下面的代碼示例。
void ucRibbon_Load(object sender, EventArgs e) {
skinRibbonGalleryBarItem1.Gallery.Groups.Remove(skinRibbonGalleryBarItem1.Gallery.Groups.OfType<GalleryItemGroup>()
.First(x => String.Equals(x.Caption, "Bonus Skins")));
}
刪除項目分組
要刪除項目分組,請添加一個新的圖庫組,并在其中添加所有現有的圖庫項目。然后,您可以刪除除新的自定義組以外的所有畫廊組,如下面的代碼示例所示。
void ucRibbon_Load(object sender, EventArgs e) {
RemoveGrouping();
}
void RemoveGrouping() {
GalleryItemGroup group = new GalleryItemGroup() { Caption = "Available Skins" };
skinRibbonGalleryBarItem1.Gallery.Groups.Insert(0, group);
foreach(var item in skinRibbonGalleryBarItem1.Gallery.GetAllItems()) {
skinRibbonGalleryBarItem1.Gallery.Groups[0].Items.Add(item);
}
while(skinRibbonGalleryBarItem1.Gallery.Groups.Count > 1)
skinRibbonGalleryBarItem1.Gallery.Groups.Remove(skinRibbonGalleryBarItem1.Gallery.Groups.Last());
}
手動更改標題和圖標
要更改功能區外觀庫中項目的標題和字形,請遍歷庫項目并修改以下屬性:
GalleryItem.Caption — 獲取或設置項目的標題。
GalleryItem.Hint — 獲取與圖庫項目關聯的提示。
GalleryItem.Description — 獲取或設置項目的描述。
GalleryItem.ImageOptions — 獲取或設置矢量圖像。矢量圖像的優先級高于光柵圖像。
GalleryItem.Image — 獲取或設置柵格圖像。要顯示自定義柵格圖像,請使默認矢量圖像無效。
GalleryItem.HoverImage — 獲取或設置當鼠標指針懸停該項目時顯示的柵格圖像。
void ucRibbon_Load(object sender, EventArgs e) {
CustomizeItems(skinRibbonGalleryBarItem1);
}
void CustomizeItems(SkinRibbonGalleryBarItem target) {
foreach(var item in target.Gallery.GetAllItems()) {
if(item.Caption == "DevExpress Dark Style") {
item.Caption = item.Hint = "Default Skin";
item.Description = "The default skin";
// We recommend that you use vector images.
item.ImageOptions.SvgImage = SvgImage.FromResources("DXApplication1.Resources.Driving.svg", typeof(Form1).Assembly);
// The vector image has priority over the raster image.
// To assign a raster image, nullify the default vector image.
item.ImageOptions.SvgImage = null;
item.ImageOptions.Image = DevExpress.Images.ImageResourceCache.Default.GetImage("office2013/miscellaneous/colors_16x16.png");
item.ImageOptions.HoverImage = DevExpress.Images.ImageResourceCache.Default.GetImage("office2013/miscellaneous/colors_32x32.png");
}
}
}
本地化Bar 和 Ribbon Skin
可以利用Localizer對象自定義外觀菜單,而不必遍歷每個Bar外觀子菜單項和Ribbon外觀庫項目容器來手動修改項目。這種方法允許您一次自定義所有現有的條形子菜單和功能區畫廊中的皮膚項目。
創建 BarLocalizer 類的后代,并覆蓋其虛擬 XtraLocalizer.GetLocalizedString 方法.
public class MyBarLocalizer : BarLocalizer {
public override string GetLocalizedString(BarString id) {
if(id == BarString.SkinCaptions) {
string defaultSkinCaptions = base.GetLocalizedString(id);
string newSkinCaptions = defaultSkinCaptions.Replace("|DevExpress Style|", "|Default Skin|");
newSkinCaptions = newSkinCaptions.Replace("|DevExpress Dark Style|", "|Default Dark Skin|");
return newSkinCaptions;
}
return base.GetLocalizedString(id);
}
}
使用靜態 BarLocalizer.Active 屬性將您的自定義類的新實例設置為當前的bar本地化器。在調用Application.Run方法之前,在Program類中調用此方法,如下所示。
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
BonusSkins.Register();
SkinManager.EnableFormSkins();
BarLocalizer.Active = new MyBarLocalizer();
Application.Run(new Form1());
}
}
結果
如果在條形外觀子項目之后分配了自定義本地化程序,或者如果功能區外觀庫已經初始化(例如,在Load事件上),則外觀項目將顯示默認標題。在這種情況下,請調用靜態SkinHelper.InitSkinPopupMenu和SkinHelpber.InitSkinGallery方法以再次初始化外觀項目并激活定位器。
void ucBar_Load(object sender, EventArgs e) {
BarLocalizer.Active = new MyBarLocalizer();
//refresh bar sub-item links
skinBarSubItem1.ClearLinks();
SkinHelper.InitSkinPopupMenu(skinBarSubItem1);
//refresh Ribbon gallery links
SkinHelper.InitSkinGallery(skinRibbonGalleryBarItem1);
}
Bonus and Custom Skin Registration
您可以將皮膚庫添加到項目中,并添加特定的代碼以注冊該庫以在運行時使用這些皮膚(例如,DevExpress.BonusSkins.19.2.dll或通過WinForms皮膚編輯器實用程序創建的庫)。通常,應在主表單開始之前調用注冊碼。
Register DevExpress.BonusSkins Library
在應用程序啟動時,調用DevExpress.UserSkins.BonusSkins.Register方法。
[STAThread]
static void Main() {
// Skin registration.
DevExpress.UserSkins.BonusSkins.Register();
Application.Run(new Form1());
}
Register Custom Skins
您可以使用WinForms皮膚編輯器實用程序創建自定義皮膚。請參閱導出和應用自定義皮膚以了解如何獲取自定義皮膚庫的注冊代碼。
以下示例顯示了在應用程序啟動時如何注冊自定義SkinProject1庫:
[STAThread]
static void Main() {
Assembly asm = typeof(DevExpress.UserSkins.SkinProject1).Assembly;
DevExpress.Skins.SkinManager.Default.RegisterAssembly(asm);
Application.Run(new Form1());
}
public class SkinRegistration : Component {
public SkinRegistration() {
DevExpress.Skins.SkinManager.Default.RegisterAssembly(typeof(DevExpress.UserSkins.SkinProject1).Assembly);
}
}
添加此代碼后,重新生成項目,并將SkinRegistration組件從Visual Studio工具箱添加到主應用程序窗體。
注冊自定義外觀以用于初始屏幕和等待表單
使用SplashScreenManager組件創建的初始屏幕和等待表單在單獨的線程中運行。請注意,在主屏幕中注冊的自定義皮膚的信息在啟動屏幕線程中不可用,直到您調用SplashScreenManager.RegisterUserSkins方法。
SplashScreenManager.RegisterUserSkins(typeof(DevExpress.UserSkins.SkinProject1).Assembly);
splashScreenManager1.ShowWaitForm();
Design-Time Skinning
在設計時,所有DevExpress控件均使用默認的“ DevExpress樣式”外觀繪制-除非您使用DefaultLookAndFeel組件應用特定外觀。
在Visual Studio “ DevExpress | WinForms控件” 菜單中,單擊“更改設計時設置...”以更改默認的設計時外觀。在調用的對話框中,選擇所需的外觀并選中“啟用設計時表單外觀”。
此設置更改DefaultDesignTimeLookAndFeel注冊表項,該注冊表項位于“ HKEY_LOCAL_MACHINE SOFTWARE Developer Express”節點(對于64位Windows,為“ HKEY_LOCAL_MACHINE SOFTWARE Wow6432Node Developer Express”節點)。選定的外觀將應用于沒有由DefaultLookAndFeel組件明確設置的所有WinForms項目。
總結
以上是生活随笔為你收集整理的DevExpress Skins<2>的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用VM Tools让VMware虚拟机
- 下一篇: 箱形图和小提琴图