Прозрачный пользовательский контроль в .net - PullRequest
1 голос
/ 07 ноября 2010

Я пытаюсь сделать кнопку веб-стиля с пользовательским контролем. Мне нужно сделать фон пользовательского контроля прозрачным. Как это сделать, не делая элементы управления невидимыми. Также мне понадобятся прозрачные Label и PictureBox.

Попытка сделать что-то вроде этого: alt text

this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
this.BackColor = Color.Transparent;

Ответы [ 3 ]

5 голосов
/ 07 ноября 2010

У всех трех перечисленных вами элементов управления уже включен стиль ControlStyles.SupportsTransparentBackColor.Просто установите свойство BackColor в конструкторе на вкладке Web. очень неясно, почему этого недостаточно для вас.

В противном случае это иллюзия, Windows Forms реализует это, прося родительский элемент управления нарисовать себя в методе OnPaintBackground (), чтобы онобеспечивает фоновые пиксели.Одна примечательная вещь, которая не работает, это перекрывающиеся элементы управления.Вы видите только родительские пиксели, а не пиксели перекрывающегося элемента управления.Это исправимо, но код ошибочен.

Единственный другой параметр прозрачности - это Form.TransparencyKey.Это настоящая прозрачность, реализованная с помощью оверлеев в видеоадаптере.Проблема в том, что это работает только на окнах верхнего уровня.Формы, а не элементы управления.

Эти ограничения присущи модели рендеринга Windows Forms с использованием отдельных окон для элементов управления.Веб-браузер не имеет того же ограничения, он эмулирует элементы управления, рисуя их.Слои краски, что делает прозрачность тривиальной, просто не рисуя.WPF также использует эту модель рендеринга.

4 голосов
/ 07 ноября 2010

Если вы хотите получить «частичную прозрачность», посмотрите это для хорошего решения: Непрозрачность кнопок / текстовых полей - VB.NET

(установка цвета фона с использованием значения Alpha)

Я знаю, что приведенный выше пример VB, но он также применим и к C #. :)

0 голосов
/ 24 декабря 2013

Вы можете использовать этот код: ImageButton () - мой конструктор.

  public ImageButton()
    {
      InitializeComponent();

      this.SetStyle(ControlStyles.Opaque, true);
      this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
    }

    protected override CreateParams CreateParams
    {
      get
      {
          CreateParams parms = base.CreateParams;
          parms.ExStyle |= 0x20;  
          return parms;
      }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...