42 lines
1.2 KiB
C#
42 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Windows.Media;
|
|
using HandyControl.Controls;
|
|
|
|
namespace HandyControl.Tools
|
|
{
|
|
/// <summary>
|
|
/// 该类可以为可视化元素提供单开的功能
|
|
/// </summary>
|
|
public class SingleOpenHelper
|
|
{
|
|
private static readonly Dictionary<string, ISingleOpen> OpenDic = new Dictionary<string, ISingleOpen>();
|
|
|
|
/// <summary>
|
|
/// 根据指定的类型创建实例
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <returns></returns>
|
|
public static T CreateControl<T>() where T : Visual, ISingleOpen, new()
|
|
{
|
|
var typeStr = typeof(T).FullName;
|
|
|
|
if (string.IsNullOrEmpty(typeStr)) return default;
|
|
|
|
var temp = new T();
|
|
if (!OpenDic.Keys.Contains(typeStr))
|
|
{
|
|
OpenDic.Add(typeStr, temp);
|
|
return temp;
|
|
}
|
|
var currentCtl = OpenDic[typeStr];
|
|
if (currentCtl.CanDispose)
|
|
{
|
|
currentCtl.Dispose();
|
|
OpenDic[typeStr] = temp;
|
|
return temp;
|
|
}
|
|
return default;
|
|
}
|
|
}
|
|
} |