Возможно ли использовать XP Visual Style в Vista/Win7?

Можно ли использовать стили XP в Vista/Win7? Если да, то возможно ли это сделать для одного контроля.

Я знаю, что могу отключить визуальные стили по одному элементу управления, используя SetWindowTheme(). Я знаю, что можно отключить визуальные стили для всего приложения win form, удалив вызов EnableVisualStyles.

Причина, по которой я спрашиваю, заключается в том, что в приложении это будет использоваться, если элемент управления в состоянии ошибки имеет задний цвет, окрашенный в красный цвет. Это не работает для ComboBoxes, когда приложение работает под Vista/Win7. Изменение цвета спины изменяет только выпадающий список, а не фактический элемент управления.

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

И да, это легко решается в WPF... /cry.:)

1 ответ

Решение

Ну, вы уже знаете, как это сделать.

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class MyComboBox : ComboBox {
    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
        SetWindowTheme(this.Handle, "", "");
    }
    [DllImport("uxtheme.dll")]
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist);
}

Независимо от того, что вы делаете, это будет выглядеть совершенно непривычно для пользователя, который привык видеть ее дизайн пользовательского интерфейса с включенными визуальными стилями. И отметьте тот, который имеет нарушения зрения, что может привлечь вас к суду в США. У Windows Forms уже есть очень хороший способ указать ошибки, ErrorProvider был разработан для этого.

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