【.Net码农】分享一款Metro风格的WPFUI

http://blog.csdn.net/ljf5566/article/details/41598269

实现思路

        用到的开源项目MahApps.Metro。具体使用请看官网文档。

主要代码

换肤弹窗

  1.   
  2.       <Popup x:Name="skinUI" Margin="0" PopupAnimation="Fade" PlacementTarget="{Binding ElementName=btnSkin}"  
  3.              StaysOpen="False" SnapsToDevicePixels="True" ClipToBounds="True" AllowsTransparency="True" Placement="Left" VerticalOffset="25">  
  4.           <Border x:Name="bdSkin" BorderBrush="{DynamicResource AccentColorBrush}" BorderThickness="1"   
  5.                   CornerRadius="8" Height="170" Width="450">  
  6.               <WrapPanel x:Name="skinPanel"/>  
  7.           Border>  
  8.       Popup>  


后台代码

  1. using MahApps.Metro;  
  2. using MahApps.Metro.Controls;  
  3. using System.Linq;  
  4. using System.Windows;  
  5. using System.Windows.Controls;  
  6. using System.Windows.Media;  
  7.   
  8. namespace UITemplate  
  9. {  
  10.     ///   
  11.     /// MainWindow.xaml 的交互逻辑  
  12.     ///   
  13.     public partial class MainWindow : MetroWindow  
  14.     {  
  15.         public MainWindow()  
  16.         {  
  17.             InitializeComponent();  
  18.             btnSkin.Click += (s, e) => skinUI.IsOpen = true;  
  19.             skinPanel.AddHandler(Button.ClickEvent, new RoutedEventHandler(ChangeSkin));  
  20.             InitSkins();  
  21.         }  
  22.         ///   
  23.         /// 初始化所有皮肤控件  
  24.         ///   
  25.         private void InitSkins()  
  26.         {  
  27.             var accents = ThemeManager.Accents;  
  28.             Style btnStyle = App.Current.FindResource("btnSkinStyle"as Style;  
  29.             foreach (var accent in accents)  
  30.             {  
  31.                 //新建换肤按钮  
  32.                 Button btnskin = new Button();  
  33.                 btnskin.Style = btnStyle;  
  34.                 btnskin.Name = accent.Name;  
  35.                 SolidColorBrush scb = accent.Resources["AccentColorBrush"as SolidColorBrush;  
  36.                 btnskin.Background = scb;  
  37.                 skinPanel.Children.Add(btnskin);  
  38.             }  
  39.         }  
  40.         ///   
  41.         /// 实现换肤  
  42.         ///   
  43.         private void ChangeSkin(object obj, RoutedEventArgs e)  
  44.         {  
  45.             if (e.OriginalSource is Button)  
  46.             {  
  47.                 Accent accent = ThemeManager.GetAccent((e.OriginalSource as Button).Name);  
  48.                 App.Current.Resources.MergedDictionaries.Last().Source = accent.Resources.Source;  
  49.             }  
  50.         }  
  51.     }  
  52. }  

效果图

【.Net码农】分享一款Metro风格的WPFUI_第1张图片

源码下载:点击打开链接


你可能感兴趣的:(.Net码农,.Net码农-WPF,.Net码农-WPF界面)