0

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

4

3 回答 3

3

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

这里没有很多好的解决方案。我遇到的所有这些都符合“丑陋”和“hackish”的要求。当您使用诸如标签控件之类的东西时,所有者绘图是一种合理的方法,但我不建议您尝试绘制自己的文本框——这太难了。有人试图在这里这样做;就像我说的那样,结果既丑陋又骇人听闻。我对自己使用它并不满意,但它可能对你有用,这取决于你的标准有多高。

当然,所有者绘图的目标是使用 GDI+(本机支持透明度)而不是 GDI(所有内置控件默认使用)来完成所有绘图,或者调用类似的函数DrawThemeTextEx,即专为渲染带有阴影的文本而设计,该阴影在玻璃上 [有点] 可读。

同样,启用兼容文本渲染(这会导致内置控件使用 GDI+ 例程进行绘制,就像它们在 .NET 的早期版本中所做的那样)等常见技巧不适用于文本框。

老实说,您最好的选择是将文本框放在表单中呈现为玻璃的区域上。使用该DwmEnableBlurBehindWindow功能可以选择性地启用表单某些区域后面的玻璃效果,而不是整个区域。我在此处的回答中提供了一个完整的、即用型的 .NET 实现。

于 2011-05-12T13:39:11.973 回答
3

在表单上放置一个面板,设置要填充的停靠样式,将面板的 BackColor 设置为颜色 X,然后将表单的 TransparencyKey 设置为相同的颜色 X。

于 2012-10-13T05:00:15.163 回答
1

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

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

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

在此处输入图像描述

于 2011-12-08T12:11:58.970 回答