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();
}
}
}