Проблема с окном из стекла - PullRequest
0 голосов
/ 12 мая 2011

Я использую форму Windows с GlassForm (используя Microsoft.WindowsAPICodePack.Shell;). моя проблема, когда я изменяю форму на GlassForm, мои текстовые поля не

Ответы [ 3 ]

3 голосов
/ 13 октября 2012

Поместите панель на форму, установите стиль заливки для заливки, установите BackColor панели на цвет X, а затем установите TransparencyKey формы на тот же цвет X.

3 голосов
/ 12 мая 2011

Да, вот как это работает. При применении эффекта Aero Glass все, что нарисовано черным цветом, будет выглядеть прозрачным. Это включает в себя текст в элементе управления текстового поля. Эта общая тема была предметом многих других вопросов здесь. Когда они хорошо написаны, они собирают много голосов, но мало ответов.

Здесь просто не так много хороших решений. Все они, с которыми я сталкивался, квалифицируются как «уродливые» и «хакерские» Рисование по владельцу - разумный подход, когда вы используете что-то вроде элемента управления надписью, но я бы не советовал пытаться нарисовать собственное текстовое поле - слишком сложно сделать правильный выбор. Кто-то пытался сделать это здесь ; как я уже сказал, результат уродлив и хакерский. Я не был удовлетворен этим для моего собственного использования, но это может работать для вас, в зависимости от того, насколько высоки ваши стандарты.

Целью владельца-рисования, конечно же, является либо выполнение всего рисования с использованием GDI + (который изначально поддерживает прозрачность) вместо GDI (который по умолчанию используют все встроенные элементы управления), либо вызов таких функций, как DrawThemeTextEx, который специально разработан для визуализации текста с тенью, которая [несколько] читается на стекле.

Кроме того, обычные приемы, такие как включение совместимого рендеринга текста (что приводит к отрисовке встроенных элементов управления с использованием процедур GDI +, как это было в ранних версиях .NET), не работают для текстового поля.

Честно говоря, вам лучше всего разместить текстовое поле над областью вашей формы, которая не отображается как стекло. Используйте функцию DwmEnableBlurBehindWindow , чтобы выборочно включить эффект стекла позади определенных областей вашей формы, а не всего объекта. Я предоставляю полную, готовую к использованию реализацию .NET в мой ответ здесь .

1 голос
/ 08 декабря 2011

Проверьте этот образец: http://www.danielmoth.com/Blog/Glass-In-C-An-Alternative-Approach.aspx

Я больше не изучал его, но поместил TextBox, Button или другие компоненты поверх этой области Aero glass - у визуализированного компонента не было проблемы с прозрачностью. Этикетки не идеальны, но их легко нарисовать с помощью GDI + Прямая ссылка на пример проекта здесь: http://www.danielmoth.com/Blog/MothGlass.zip

Похоже, он помещает панель за элемент управления и устанавливает прозрачный ключ для панели.

enter image description here

...