WPF 复制/克隆 TabItem 包括属性和结构

来源:互联网 发布:超级优化女主角孙菲菲 编辑:程序博客网 时间:2024/05/16 10:55

WPF 复制/克隆 TabItem 包括属性和结构


    /// 使用方法如下    /// 新建一个 TabItem 对象    /// System.Windows.Controls.TabItem NewTabItem = new TabItem();    /// 复制一个已存在的 TabItem 的属性到另一个 TabItem    /// NewTabItem.CopyPropertiesFrom(TabItem1);    /// 添加一个 TabItem 到用户界面    /// tabControl.Items.Add(NewTabItem);

using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Windows;namespace BLL{    /// <summary>    /// 扩展方法 - 从指定对象复制属性    /// </summary>    public static class CopyTabItem    {        /// <summary>        /// 从指定对象复制属性        /// </summary>        /// <param name="controlToSet"></param>        /// <param name="controlToCopy"></param>        public static void CopyPropertiesFrom(this FrameworkElement controlToSet, FrameworkElement controlToCopy)        {            foreach (var dependencyValue in GetAllProperties(controlToCopy).Where((item) => !item.ReadOnly).ToDictionary(dependencyProperty => dependencyProperty, controlToCopy.GetValue))            {                controlToSet.SetValue(dependencyValue.Key, dependencyValue.Value);            }        }        /// <summary>        /// 得到所有属性        /// </summary>        /// <param name="obj"></param>        /// <returns></returns>        public static IList<DependencyProperty> GetAllProperties(DependencyObject obj)        {            return (from PropertyDescriptor pd in TypeDescriptor.GetProperties(obj, new Attribute[]            {                new PropertyFilterAttribute(PropertyFilterOptions.SetValues)            })                    select DependencyPropertyDescriptor.FromProperty(pd)                    into dpd                    where dpd != null                    select dpd.DependencyProperty).ToList();        }    }}


以上代码大部分来源于: CodeGo.net > 复制的TabItem与MVVM结构 http://codego.net/606080/
0 0