WPF 动态更换样式文件

原文: WPF 动态更换样式文件

  ApplySkinFromMenuItem("Style/BigImgStyle.xaml", "Style/FileListStyle.xaml");

 

  //换肤
        void ApplySkinFromMenuItem(string source, string oldSources)
        {
            string skinDictPath = source;
            App app = Application.Current as App;
            app.ApplySkin(skinDictPath, oldSources);
        }

 

ApplySkin(这个方法是写在Application文件中的)

 

   /// <summary>
        /// 换样式 (这个方法是写在Application文件中的)
        /// </summary>
        /// <param name="newPaths">要加入的新样式文件路径</param>
        /// <param name="oldxamls">要删除的老的样式文件路径</param>
        public void ApplySkin(string newPaths, string oldxamls)
        {
            Collection<ResourceDictionary> mergedDicts = base.Resources.MergedDictionaries;
            string[] ss = oldxamls.Split(',');
            if (ss.Length > 0)
            {
                foreach (var path in ss)
                {
                    if (mergedDicts.Count > 0 && path.Trim() != "")
                    {
                        foreach (var item in mergedDicts)
                        {
                            if (item.Source.OriginalString.Trim().EndsWith(path.Trim()))
                            {
                                mergedDicts.Remove(item);
                                break;
                            }
                        }
                    }
                }
            }
            if (newPaths != "")
            {
                try
                {
                    string[] newss = newPaths.Split(',');
                    if (newss.Length > 0)
                    {
                        foreach (var item in newss)
                        {
                            Uri skinDictionaryUri = new Uri(item, UriKind.Relative);
                            ResourceDictionary skinDict = new ResourceDictionary();
                            //ResourceDictionary skinDict = Application.LoadComponent(skinDictionaryUri) as ResourceDictionary;
                            skinDict.Source = skinDictionaryUri;

                            mergedDicts.Add(skinDict);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("dsds:" + ex.Message);
                }

            }


        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值