問題 在使用 DevExpress 開發 WinForm 程式時,我是使用的預設皮膚進行開發。但客戶要求標題欄背景色改為藍色,標題文字顏色改為白色。 改顏色比較簡單,參考了 "DevExpress Support" 的說明,通過獲取皮膚更改 和 就可以實現。不過更改之後,發現在低分屏下麵,標題文字出 ...
問題
在使用 DevExpress 開發 WinForm 程式時,我是使用的預設皮膚進行開發。但客戶要求標題欄背景色改為藍色,標題文字顏色改為白色。
改顏色比較簡單,參考了 DevExpress Support 的說明,通過獲取皮膚更改 BackColor
和 ForeColor
就可以實現。不過更改之後,發現在低分屏下麵,標題文字出現模糊的情況。
原因
初步猜想應該是文字陰影的問題,但搜索了大部分資料沒有找到解決方案,最後在 DevExpress Support 的這篇文章看到了自定義 FormPainter
。起初我認為是重載 DrawText()
解決,不過沒有找到相關的參數,之後發現它有一個 DrawTextShadow()
方法,應該就是它了。
解決
解決方法很簡單,就是重寫 DrawTextShadow()
方法,將其作為一個空方法就行了,不做任何陰影處理。
public class ReplaceFontFormPainter : FormPainter
{
public ReplaceFontFormPainter(Control owner, ISkinProvider provider) : base(owner, provider)
{
}
// 不再繪製標題文字陰影。
protected override void DrawTextShadow(GraphicsCache cache, AppearanceObject appearance, Rectangle bounds)
{
}
}
來到你需要更改的窗體,重載窗體的 CreateFormBorderPainter()
方法,使用你自己創建的 FormPainter
。
public partial class MainForm : XtraForm
{
protected override FormPainter CreateFormBorderPainter() => new ReplaceFontFormPainter(this, LookAndFeel);
}
最後的效果: