Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Стилизация ComboBoxItem

#c_sharp #wpf


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

На данный момент пробую вот так:


    
    


    


Ответы

Ответ 1



Это, к сожалению, не так просто. Давайте делать это по частям. Во-первых, у выпадающего списка комбобокса есть свой цвет фона и цвет границы. Эти цвета берутся как ресурсы с ключами SystemColors.WindowBrushKey и SystemColors.WindowFrameBrushKey, поэтому их можно превратить в прозрачные, если хочется. Transparent Transparent Это даёт почти то, что надо, но именно почти. Видите, в чём проблема? Системный стиль для комбобокса определяет тень, и мы её нашей прозрачностью не отключили. Если вас такой результат устраивает, на этом всё. Если нет, читайте дальше. Как её можно отключить? Для это я не нашёл встроенных средств, и значит, придётся доставать серьёзное оружие — редактировать шаблон. Если у вас Visual Studio 2015 или выше, вы можете легко получить системный шаблон на редактирование, если нет — вам может помочь Expression Blend (или друг, у которого установлена Visual Studio 2015 или старше). Как попросить Visual Studio показать вам стиль, написано в подробностях здесь. Имея стиль, вы должны найти элемент, который задаёт тень. У меня это такой код: ... Мы видим, что тень задаётся контролом , но цвет его установлен в Transparent. Поискав ещё по коду шаблона, находим триггер, который меняет цвет на непрозрачный: Закомментировав этот триггер (у меня он встречается в коде шаблона дважды), получаем нужный результат: Недостаток «бронебойного» метода с переопределением шаблона — вы фиксируете шаблон, подходящий для той операционной системы, на которой вы это делаете. Например, если вы делаете это на Windows 10, внешний вид комбобокса будет как в Windows 10, даже если вы запустите программу на Windows 7. Обычно это не большая проблема, потому что вы меняете стиль полностью.

Комментариев нет:

Отправить комментарий