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

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

Application.EnableVisualStyles();

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

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

1 ответ

Решение

Похоже, вы можете использовать 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

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