Можете ли вы отключить визуальные стили/темы только для одного элемента управления Windows?

StackOverflow https://stackoverflow.com/questions/544203

Вопрос

Мое приложение Windows Forms использует следующую стандартную строку кода, чтобы визуальные стили (темы) были включены для всего приложения...

Application.EnableVisualStyles();

...что работает отлично, все элементы управления имеют тематический вид, а не плоский серый линкор, который вы бы получили в противном случае.Но мне нужно отключить визуальные стили только для одного экземпляра элемента управления.Я не могу удалить приведенную выше строку, потому что тогда я потеряю темы для всех элементов управления.Можно ли удалить темы из одного экземпляра элемента управления?

К вашему сведению:Так получилось, что я хочу удалить тему из экземпляра DateTimePicker, поэтому, если общий ответ будет отрицательным, за исключением DateTimePicker, этого будет достаточно.Я рад использовать вызов платформы, если решение предполагает использование элемента управления на самом низком уровне.

Это было полезно?

Решение

Похоже, вы можете использовать SetWindowTheme для элемента управления:

[DllImport("uxtheme", ExactSpelling = true, CharSet = CharSet.Unicode)]
public extern static Int32 SetWindowTheme (IntPtr hWnd, 
              String textSubAppName, String textSubIdList);

yourControl.FlatStyle = FlatStyle.System;
SetWindowTheme(yourControl.Handle, "", "");

Исходная статья CodeProject

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top