2010-03-12 130 views
0

在WPF應用程序,我有一個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下運行的應用程序,一切都OK了。在Windows XP下運行時 - ListView行的默認字體太小,並且當用戶將鼠標懸停在其上時,ListView的行不會更改顏色。

如何使Windows XP下的ListView外觀與Vista下相同?

回答

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更改爲正確的程序集和組件名稱。您通常可以通過搜索所需的Windows版本和「wpf主題名稱」或類似名稱找到正確的組件名稱。請注意,這將重新設置應用程序中的所有控件!

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

如果願望僅僅是retheme一個ListView控件,我會合並在ListView本身或直接父元素的資源字典。

+0

謝謝,它非常有幫助! +1 – rem 2010-03-13 13:11:47

相關問題