Рендеринг WPF Combobox на XP

У меня проблема с простым рендерингом выпадающего списка на XP.

Код просто:

<ComboBox Cursor="Hand" customCommands:ComboBoxSelectionChange.Command="{Binding StatusChange}" ItemsSource="{Binding AvailabilityStatusList}"/>

Однако результат на разных ОС не совсем ожидаемый:

Vista: Combobox Vista
XP: Combobox XP


person sagibb    schedule 24.11.2010    source источник


Ответы (2)


Вы можете заставить приложение WPF применять определенную стандартную схему Windows, независимо от текущей версии Windows (например, XP или Vista).

Чтобы приложение использовало тему Aero (Vista), поместите это в свой App.xaml:

  <!-- Use the Aero scheme for your application, regardless the currently applied Windows Theme or OS Version. -->
    <ResourceDictionary
        Source="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, 
        PublicKeyToken=31bf3856ad364e35, ProcessorArchitecture=MSIL;component/themes/aero.normalcolor.xaml" />
person olli-MSFT    schedule 24.11.2010
comment
Спасибо, это именно то, что я искал! Поскольку наше приложение не использует цветовую схему ОС (оно использует настраиваемые прозрачные окна), оно не будет выглядеть странно даже в настраиваемых темах. Единственная проблема, которая все еще существует, — это разница между размером шрифта в XP и Vista/7. - person sagibb; 28.11.2010
comment
Ух ты!! Не знал, что ты так умеешь. Очень впечатлен. - person Eddie; 30.11.2011

Поле со списком, как и большинство других элементов управления, учитывает тему ОС, поэтому ваш пользовательский интерфейс будет соответствовать остальной поверхности ОС.

Если вы хотите создать внешний вид, не зависящий от ОС (т. е. сохранить один и тот же внешний вид в разных операционных системах), вам необходимо повторно создать его шаблон.

person Francesco De Vittori    schedule 24.11.2010
comment
Я действительно не хочу (или не должен) переделывать его, я просто хочу, чтобы он выглядел прилично. На скриншоте хорошо видно, что стандартный результат на XP искажен. - person sagibb; 24.11.2010
comment
Это не искажено. Просто вам нужно установить его высоту. Попробуйте Height=20, и он волшебным образом будет выглядеть так, как вы хотите. - person Francesco De Vittori; 24.11.2010