在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下相同?
答案 0 :(得分:3)
这是因为WPF为这两个操作系统选择了不同的主题。主题是基于操作系统级别的默认样式。 Vista为您提供Aero主题,而Windows XP为您提供Luna主题集。
XP可能无法实现Aero主题的所有视觉闪现,而Luna主题在Vista和Windows 7中可能看起来低调,但您可以用简单的风格覆盖主题。只需为ListView定义一个样式,完全指定所需的外观。我认为(但不确定)Expression Blend有办法为你提取主题信息。
看来你也可以覆盖WPF为你挑选的主题(虽然我自己没有尝试过)。
从App.xaml中的程序集合并主题的资源字典。将Source更改为正确的程序集和组件名称。您通常可以通过搜索所需的窗口版本和“wpf主题名称”或类似内容来找到正确的组件名称。请注意,这将重新设置应用程序中所有控件的主题!
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
如果只想重新编写一个ListView,我会合并ListView本身的资源字典或直接的父元素。