分享一款Metro风格的WPFUI

实现思路

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

主要代码

换肤弹窗

  
        
            
                
            
        


后台代码

using MahApps.Metro;
using MahApps.Metro.Controls;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace UITemplate
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            btnSkin.Click += (s, e) => skinUI.IsOpen = true;
            skinPanel.AddHandler(Button.ClickEvent, new RoutedEventHandler(ChangeSkin));
            InitSkins();
        }
        /// 
        /// 初始化所有皮肤控件
        /// 
        private void InitSkins()
        {
            var accents = ThemeManager.Accents;
            Style btnStyle = App.Current.FindResource("btnSkinStyle") as Style;
            foreach (var accent in accents)
            {
                //新建换肤按钮
                Button btnskin = new Button();
                btnskin.Style = btnStyle;
                btnskin.Name = accent.Name;
                SolidColorBrush scb = accent.Resources["AccentColorBrush"] as SolidColorBrush;
                btnskin.Background = scb;
                skinPanel.Children.Add(btnskin);
            }
        }
        /// 
        /// 实现换肤
        /// 
        private void ChangeSkin(object obj, RoutedEventArgs e)
        {
            if (e.OriginalSource is Button)
            {
                Accent accent = ThemeManager.GetAccent((e.OriginalSource as Button).Name);
                App.Current.Resources.MergedDictionaries.Last().Source = accent.Resources.Source;
            }
        }
    }
}

效果图


源码下载:点击打开链接


你可能感兴趣的:(WPF)