1. 程式人生 > >使WPF程式應用預置的控制元件風格, 如Aero, Luna, Royale, Classic等

使WPF程式應用預置的控制元件風格, 如Aero, Luna, Royale, Classic等

原文: 使WPF程式應用預置的控制元件風格, 如Aero, Luna, Royale, Classic等

     WPF預設有Aero, Classic, Luna, Royale主題, WPF程式會根據Windows主題決定WPF程式所使用的控制元件風格, 而且當Windows主題不是Aero, Luna或Royale, 而是其他主題的話, WPF將會採用比較醜的Classic主題, 那我怎麼讓WPF程式使用指定的主題呢?

     其實很簡單, 下面例項如何設定為Aero主題:
     在WPF專案中新增PresentationFramework.Aero.dll這個引用, 然後在程式的Resources中加入
    
< Application .Resources >
        
< ResourceDictionary  Source ="/PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35;component/themes/aero.normalcolor.xaml"   />

    
</ Application.Resources >       這相當於把PresentationFramework.Aero程式集中的空間風格程式碼引用到當前程式中.
      注意, 專案必須引用主題對應的Assembly, 比如PresentationFramework.Aero.dll, PresentationFramework.Royale.dll等等, 它們可以在"Program Files\Reference Assemblies\Microsoft\Framework\v3.0" 或者 GAC中找到.
      上面的XAML程式碼也可以使用相應的C#程式碼代替, 比如在Application的Startup事件處理函式中加入程式碼:
    
protected   override   void  OnStartup(StartupEventArgs e)
    {
        
base .OnStartup(e);
        Uri aero 
=   new  Uri( " /PresentationFramework.Aero, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35;component/themes/aero.normalcolor.xaml " , UriKind.Relative);
        Resources.MergedDictionaries.Add(Application.LoadComponent(aero) 
as  ResourceDictionary); 
    }
      當然也可以在Window的Resources中加入這個ResourceDictionary, 那樣就只會在這個Window中採用此主題.

      要指定其他主題的方法也差不多, 也就是引用相關dll和新增Resources. WPF中的Aero主題和Windows Vista裡的Aero主題控制元件風格完全一樣, 包括譬如MouseEnter時的動畫效果, 下面是在啟用了Luna Element 4 視覺效果的Windows 2003系統執行的使用了Aero主題的WPF程式截圖:



但WPF裡的Aero主題在非Windows Vista系統是沒有玻璃效果的.. 那不是GDI就能做到的東西..