[英]How can I apply my own theme to my Windows Forms application?
你不能輕易做到這一點。 您可以使用多種替代方案。
最簡單的方法是創建自己的Skin XML文件,在其中為應用程序指定自己的顏色,通過您創建的類讀取它並應用新顏色。 這將使事物分離並為將來的變化做好准備。 但請注意,您仍然無法更改標題欄的呈現方式以及其他特定於系統的內容,例如X和最大化按鈕的外觀。
擴展到第1點,您可以將表單創建為無邊框,並使用自定義繪制(覆蓋OnPaint)和圖像創建窗口。 這很難實現。 您可能希望從Form類繼承並創建自己的CustomDrawnForm,您將在整個應用程序中使用它。
使用眾多控件庫中的一個,例如DevExpress。 有些是免費的,有些是昂貴的。
你想要做的事情在Windows.Forms中並不是很簡單,也許你應該看看WPF和其他替代品。
覆蓋OnPaint
方法並繪制您想要的任何內容。 :)
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
SolidBrush brush = new SolidBrush(Color.Black);
float percent = (float)(val - min) / (float)(max - min);
Rectangle rect = this.ClientRectangle;
rect.Width = (int)((float)rect.Width * percent);
g.FillRectangle(brush, rect);
brush.Dispose();
g.Dispose();
}
這取決於你對主題的意圖; 漢斯在評論中說,通常使用系統的“主題”來控制和窗口外觀被視為一種資產。
但是,對於應用程序中的主題元素 - 例如標題面板的背景或標題字體顏色等,那么我將構建一個界面,其中包含應用程序中顏色/圖像的定義(例如ITheme
),然后只使用常規數據綁定進行配置在設置ITheme
時,它們在運行時適當地適當。
public interface ITheme
{
string Name { get; }
Image Logo { get; }
String BrandText1 { get; }
String BrandText2 { get; }
Image BrandBannerLogo { get; }
Color BrandPanelText_Left { get; }
Color BrandPanelText_Centre { get; }
}
實際上,您可以更進一步......例如,在我們的應用程序中,我們還定義了一個IThemeManager
:
public interface IThemeManager : INotifyPropertyChanged
{
event EventHandler CurrentThemeChanged;
ITheme CurrentTheme { get; set; }
Dictionary<string, ITheme> AvailableThemes { get; }
}
我們允許ThemeManager被依賴注入,然后我們在控件中綁定它的Current
屬性:
[Dependency]
public IThemeManager ThemeManager
{
get { return _themeManager; }
set
{
if (_themeManager != value)
{
_themeManager = value;
if (_themeManager != null && !DesignMode)
{
_headerPanelBackgroundImageBinding = themePanel.DataBindings.Add("BackgroundImage", ThemeManager, "CuurentTheme.Logo", false, DataSourceUpdateMode.Never);
}
else
{
// Reset to the default
this.DataBindings.Remove(_headerPanelBackgroundImageBinding);
}
Invalidate();
}
}
}
我知道這個問題相當陳舊,但對於那些(像我一樣)仍然有興趣創建真正的“主題”Windows窗體,如上所述,WPF非常適合創建主題。 還有相當多的預先創建的主題(Google和stackoverflow始終是您的朋友)可供下載。 Windows Forms項目世界可能有一點學習曲線,但恕我直言也非常值得。 但是,如果您希望使用普通的Windows窗體應用程序(就像我一樣),最簡單的建議是創建無邊框窗體(將FormBorderStyle設置為None)。 這將保留大多數標准的Windows容器屬性。 當然,您需要創建自己的“主題”TitleBar和邊框,但這主要是Windows窗體的“主題”所在。 您還需要創建自己的大小調整和移動方法,但Google和stackoverflow再次成為您的朋友。 這個簡單的建議對某些人來說很明顯,對我來說是巨大的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.