Да, вот как это работает. При применении эффекта Aero Glass все, что нарисовано черным цветом, будет выглядеть прозрачным. Это включает в себя текст в элементе управления текстового поля. Эта общая тема была предметом многих других вопросов здесь. Когда они хорошо написаны, они собирают много голосов, но мало ответов.
Здесь просто не так много хороших решений. Все они, с которыми я сталкивался, квалифицируются как «уродливые» и «хакерские» Рисование по владельцу - разумный подход, когда вы используете что-то вроде элемента управления надписью, но я бы не советовал пытаться нарисовать собственное текстовое поле - слишком сложно сделать правильный выбор. Кто-то пытался сделать это здесь ; как я уже сказал, результат уродлив и хакерский. Я не был удовлетворен этим для моего собственного использования, но это может работать для вас, в зависимости от того, насколько высоки ваши стандарты.
Целью владельца-рисования, конечно же, является либо выполнение всего рисования с использованием GDI + (который изначально поддерживает прозрачность) вместо GDI (который по умолчанию используют все встроенные элементы управления), либо вызов таких функций, как DrawThemeTextEx
, который специально разработан для визуализации текста с тенью, которая [несколько] читается на стекле.
Кроме того, обычные приемы, такие как включение совместимого рендеринга текста (что приводит к отрисовке встроенных элементов управления с использованием процедур GDI +, как это было в ранних версиях .NET), не работают для текстового поля.
Честно говоря, вам лучше всего разместить текстовое поле над областью вашей формы, которая не отображается как стекло. Используйте функцию DwmEnableBlurBehindWindow
, чтобы выборочно включить эффект стекла позади определенных областей вашей формы, а не всего объекта. Я предоставляю полную, готовую к использованию реализацию .NET в мой ответ здесь .