分享一款Metro风格的WPFUI

来源:互联网 发布:你瞒我瞒网络歌手 编辑:程序博客网 时间:2024/06/05 07:49

实现思路

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

主要代码

换肤弹窗

  <!--实现换肤-->        <Popup x:Name="skinUI" Margin="0" PopupAnimation="Fade" PlacementTarget="{Binding ElementName=btnSkin}"               StaysOpen="False" SnapsToDevicePixels="True" ClipToBounds="True" AllowsTransparency="True" Placement="Left" VerticalOffset="25">            <Border x:Name="bdSkin" BorderBrush="{DynamicResource AccentColorBrush}" BorderThickness="1"                     CornerRadius="8" Height="170" Width="450">                <WrapPanel x:Name="skinPanel"/>            </Border>        </Popup>


后台代码

using MahApps.Metro;using MahApps.Metro.Controls;using System.Linq;using System.Windows;using System.Windows.Controls;using System.Windows.Media;namespace UITemplate{    /// <summary>    /// MainWindow.xaml 的交互逻辑    /// </summary>    public partial class MainWindow : MetroWindow    {        public MainWindow()        {            InitializeComponent();            btnSkin.Click += (s, e) => skinUI.IsOpen = true;            skinPanel.AddHandler(Button.ClickEvent, new RoutedEventHandler(ChangeSkin));            InitSkins();        }        /// <summary>        /// 初始化所有皮肤控件        /// </summary>        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);            }        }        /// <summary>        /// 实现换肤        /// </summary>        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;            }        }    }}

效果图


源码下载:点击打开链接


0 0
原创粉丝点击