Поддерживается ли прозрачность окна для моно форм?
Я разрабатываю мультиплатформенную программу с использованием Mono, и она требует поддержки Form Opacity. В основном возможность сделать окно полупрозрачным. Это прекрасно работает в Windows, установив свойство Window.Form.Opacity, скажем, 0,5. В Ubuntu 14.04, однако, он не работает "из коробки". Я думаю, что я использую Unity и Compiz, что бы ни поставлялось с настройкой Ubuntu по умолчанию.
Согласно Mono FAQ, это должно поддерживаться:
Как я могу сделать мои окна альфа смешанными? (Прозрачный)
Реализация Mono в Winform поддерживает прозрачность в своих окнах до тех пор, пока соответствующая система управления окнами поддерживает ее.
Для пользователей Unix/X11 это означает, что у них должно быть включено расширение COMPOSITE на их сервере, и у них должен быть запущен менеджер композитинга, такой как xcompmgr.
В GenToo Linux Wiki есть хорошее описание того, как настроить сервер Xorg для поддержки прозрачности.
http://www.mono-project.com/docs/faq/winforms/
Ссылка, на которую они указывают, мертва.
Я новичок в Linux и не совсем уверен, что понимаю все части, необходимые для запуска и запуска оконного менеджера компоновки. Кроме того, у меня уже нет одного (compiz?)
Что я должен попытаться заставить мою прозрачность Winform работать?
Изменить: Моя тестовая программа в основном представляет собой форму с полосой прокрутки (от 0 до 100), в которой есть обработчик события при изменении, чтобы установить прозрачность формы на основе значения полосы прокрутки. Это мясо этого:
private void trackBar1_Scroll(object sender, EventArgs e)
{
double opacity = ((double)trackBar1.Value) / 100;
this.Opacity = opacity;
}
Прекрасно работает в Windows.
1 ответ
У вас действительно есть все, что вам нужно с compiz
,
настройка Window.Form.Opacity
следует установить свойство X window _NET_WM_WINDOW_OPACITY
на окне;
Чтобы проверить, работает ли часть Ubuntu, попробуйте установить непрозрачность вручную на 0,5 с помощью этой команды низкого уровня (щелкните окно):
$ xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY 0x7fffffff
И вернемся к полной непрозрачности:
$ xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY 0xffffffff
Один способ, как установка Window.Form.Opacity
может произойти сбой в том, что он выбирает неправильное (но тесно связанное) окно и устанавливает там его свойство.
По вашим комментариям идея была правильной. Добавление:
Я подозреваю, что это очень специфическая ошибка, которая существует и в других программах: окно, выбранное для того, чтобы сделать его прозрачным, определяется некоторыми эвристиками, основанными на том, как X-окна декоратора окна и приложения связаны / вложены и т. Д. Но с Внедрение переучивания WM привело к большим изменениям в этой области - с радостью эвристика все еще работала. Из того, что я понимаю, это случай неудачной эвристики, так что какое-то невидимое окно рядом будет прозрачным...
Посмотрите на эту ошибку, чтобы понять больше проблемы: transset не может изменить свойство _NET_WM_WINDOW_OPACITY