在Windows Vista和Windows XP下出现的WPF ListView是不一样的

时间:2010-03-12 08:34:00

标签: wpf user-interface listview windows-vista windows-xp

在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的行不会改变颜色。

如何在Windows XP下使用ListView外观与Vista下相同?

1 个答案:

答案 0 :(得分:3)

这是因为WPF为这两个操作系统选择了不同的主题。主题是基于操作系统级别的默认样式。 Vista为您提供Aero主题,而Windows XP为您提供Luna主题集。

XP可能无法实现Aero主题的所有视觉闪现,而Luna主题在Vista和Windows 7中可能看起来低调,但您可以用简单的风格覆盖主题。只需为ListView定义一个样式,完全指定所需的外观。我认为(但不确定)Expression Blend有办法为你提取主题信息。

看来你也可以覆盖WPF为你挑选的主题(虽然我自己没有尝试过)。

  1. 添加对包含正确主题的程序集的引用。例如,对于Vista(Aero),这是PresentationFramework.Aero。
  2. 从App.xaml中的程序集合并主题的资源字典。将Source更改为正确的程序集和组件名称。您通常可以通过搜索所需的窗口版本和“wpf主题名称”或类似内容来找到正确的组件名称。请注意,这将重新设置应用程序中所有控件的主题!

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    
  3. 如果只想重新编写一个ListView,我会合并ListView本身的资源字典或直接的父元素。