Внешний вид WPF ListView в Windows Vista и Windows XP не совпадает - PullRequest
0 голосов
/ 12 марта 2010

В приложении WPF у меня есть ListView:

<ListView Name="ItemSelList" ItemsSource="{Binding ItemColl}" SelectionChanged="ItemSelList_SelectionChanged">
   <ListView.View>
     <GridView>
      <GridViewColumn Header="Date" Width="90" DisplayMemberBinding="{Binding Date}"/>
      <GridViewColumn Header="Time" Width="90" DisplayMemberBinding="{Binding Time}"/>
      <GridViewColumn Header="Description" Width="250" DisplayMemberBinding="{Binding Description}"/>
     </GridView>
  </ListView.View>
</ListView>

При запуске приложения под Windows Vista все в порядке. При работе в Windows XP - размер шрифта по умолчанию для строк ListView слишком мал, и строки ListView не меняют цвет, когда пользователь наводит курсор мыши над ними.

Как сделать, чтобы внешний вид ListView в Windows XP был таким же, как в Vista?

1 Ответ

3 голосов
/ 12 марта 2010

Это связано с тем, что WPF выбирает разные темы для двух операционных систем. Темы - это стили по умолчанию, основанные на уровне операционной системы. Vista предлагает вам тему Aero, а Windows XP - набор тем Luna.

XP может не обладать всей визуальной яркостью темы Aero, а тема Luna может выглядеть заниженной в Vista и Windows 7, но вы можете переопределить тему простым стилем. Просто определите стиль для вашего ListView, который полностью определяет внешний вид, который вы хотите. Я ДУМАЮ (но не уверен), что в Expression Blend есть способ извлечь информацию о теме для вас.

Похоже, вы также можете переопределить тему, которую выберет для вас WPF (хотя я сам не пробовал).

  1. Добавить ссылку на сборку, которая содержит правильную тему. Например, для Vista (Aero) это PresentationFramework.Aero.
  2. Слияние в словаре ресурсов темы из сборки в вашем App.xaml. Измените Источник, чтобы он был правильной сборкой и именем компонента. Как правило, вы можете найти правильное имя компонента, выполнив поиск по той версии окон, которую вы хотите, и «wpf theme name» или что-то подобное. Обратите внимание, что это перенастроит все элементы управления в вашем приложении!

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    

Если желание состоит только в том, чтобы перефразировать один ListView, я бы объединил словарь ресурсов в самом ListView или непосредственном родительском элементе.

...