Непрозрачность окна для Моно форм поддерживается?

Я разрабатываю многоплатформенную программу, использующую Моно, и она требует поддержки Непрозрачности Формы. В основном способность сделать окно полупрозрачным. Это хорошо работает в окнах путем установки Окна. Форма. Свойство Opacity для высказывания 0.5. В Ubuntu 14.04 однако это не работает out-of-the-box. Я думаю, что выполняю Unity и Compiz, независимо от того, что шло с установкой Ubuntu по умолчанию.

Согласно Моно FAQ, это должно поддерживаться:

Как я могу сделать свою альфу окон смешанной? (прозрачный)

Прозрачность поддержки внедрения Mono Winform на ее окнах пока базовая система управления окнами имеет поддержку его.

Для пользователей Unix/X11 это означает, что им нужно было включить СОСТАВНОЕ расширение на их сервере, и они должны выполнять составляющего композит менеджера, как 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.

2
задан 1 September 2014 в 22:35

1 ответ

У Вас действительно есть все, в чем Вы нуждаетесь с compiz.

Установка Window.Form.Opacity должна установить свойство _NET_WM_WINDOW_OPACITY X-окна на окне;

Для теста, работает ли часть человечности, попытайтесь установить непрозрачность вручную на 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's было большое изменение в области - с удовольствием, эвристика все еще работала. Из того, что я понимаю, это - случай сбоя эвристики, так, чтобы некоторое соседнее невидимое окно было сделано прозрачным...

Взгляд на эту ошибку для понимания большего количества проблемы: транснабору не удается изменить _NET_WM_WINDOW_OPACITY свойство

1
ответ дан 20 November 2019 в 02:11

Другие вопросы по тегам:

Похожие вопросы: