Windows aero glass表单文本问题

我使用带有GlassForm的Windows窗体(使用Microsoft.WindowsAPICodePack.Shell;)。 我的问题,当我将表单更改为GlassForm我的文本框文本不

在面板上放置一个面板,设置要填充的底座样式,将面板的BackColor设置为颜色X,然后将窗体的TransparencyKey设置为相同的颜色X.

是的,这就是它的工作原理。 应用Aero Glass效果后,以黑色绘制的任何内容都将呈现为透明。 这包括文本框控件中的文本。 这个一般主题一直是这里许多其他问题的主题。 写得好的时候,他们会收集很多赞成票,但答案很少。

这里没有很多好的解决方案。 我遇到的所有人都有资格认为“丑陋”和“黑客”。 当你使用像标签控件这样的东西时,所有者绘图是一种合理的方法,但我不建议你尝试绘制自己的文本框 – 这太难以正确。 有人试图这样做 ; 就像我说的那样,结果既丑陋又讨厌。 我对自己的使用并不满意,但它可能对你有用,这取决于你的标准有多高。

当然,拥有者绘图的目标是使用GDI +(原生支持透明度)而不是GDI(默认情况下所有内置控件都使用)或调用DrawThemeTextExDrawThemeTextEx来完成所有绘图。专门用于渲染带有阴影的文本,该阴影在玻璃上有点可读。

同样,通常的技巧,如启用兼容的文本呈现(导致内置控件使用GDI +例程绘制,就像在早期版本的.NET中一样)不适用于文本框。

老实说,最好的办法是将文本框放在表单渲染为玻璃的区域上。 使用DwmEnableBlurBehindWindow函数有选择地启用窗体某些区域后面的玻璃效果,而不是整个事物。 我在这里的答案中提供了一个完整的,随时可用的.NET实现。

请查看此示例: http : //www.danielmoth.com/Blog/Glass-In-C-An-Alternative-Approach.aspx

我没有进一步研究它,但是在这个Aero玻璃区域上放置了TextBox或Button或其他组件 – 渲染的组件没有透明度问题。 标签不完美但可以使用GDI +轻松绘制。示例项目的直接链接位于: http : //www.danielmoth.com/Blog/MothGlass.zip

看起来他将一个面板放在控件后面,并为面板设置TransparencyKey。

在此处输入图像描述