Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Vista和Windows XP下WPF列表视图的外观不同_Wpf_User Interface_Listview_Windows Vista_Windows Xp - Fatal编程技术网

Windows Vista和Windows XP下WPF列表视图的外观不同

Windows Vista和Windows XP下WPF列表视图的外观不同,wpf,user-interface,listview,windows-vista,windows-xp,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" DisplayMembe

在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下的ListView外观与Vista下的相同?

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

XP可能无法实现Aero主题的所有视觉浮华,而Luna主题在Vista和Windows7中可能显得低调,但您可以用简单的样式覆盖该主题。只需为ListView定义一个完全指定所需外观的样式。我认为(但不确定)Expression Blend可以为您提取主题信息

看起来您还可以覆盖WPF为您选择的主题(尽管我自己还没有尝试过)

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

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

  • 如果只想重新编排一个ListView,我会将资源字典合并到ListView本身或直接的父元素中。

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

    XP可能无法实现Aero主题的所有视觉浮华,而Luna主题在Vista和Windows7中可能显得低调,但您可以用简单的样式覆盖该主题。只需为ListView定义一个完全指定所需外观的样式。我认为(但不确定)Expression Blend可以为您提取主题信息

    看起来您还可以覆盖WPF为您选择的主题(尽管我自己还没有尝试过)

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

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