private static CellEditor GetCellEditor(object key) { var resource = default(CellEditor); if (!DefaultCellEditorSelector.TryGetCellEditor(key, out resource)) { throw new KeyNotFoundException("Resource not found"); } return(resource); }
private static bool TryGetResource(object key, out object value) { value = null; var dispatcher = Dispatcher.CurrentDispatcher; if (dispatcher == null) { return(false); } var target = default(DefaultCellEditorSelector); lock ((( ICollection )s_instances).SyncRoot) { for (int i = s_instances.Count - 1; i >= 0; i--) { var instance = s_instances[i].Target as DefaultCellEditorSelector; if (instance == null) { s_instances.RemoveAt(i); } else if (instance.Dispatcher == dispatcher) { target = instance; // We could exit the loop but we don't because we want to clean up the list // and keep it small. We don't want it to become large with lots of empty // WeakReference. //break; } } if (target == null) { target = new DefaultCellEditorSelector(); s_instances.Add(new WeakReference(target)); } // We keep a strong reference on the target instance to prevent that instance // from being garbage collected. We assume that we will need that instance // again for other calls. We don't want to have to create a new instance to // query for a single resource. s_instance = target; } Debug.Assert(target != null); value = target.TryFindResource(key); return(value != null); }
private static CellEditor TryFreeze(CellEditor editor) { if ((editor != null) && !editor.IsFrozen) { DefaultCellEditorSelector.TrySeal(editor.EditTemplate); if (editor.CanFreeze) { editor.Freeze(); } } return(editor); }
private static bool TryGetCellEditor(object key, out CellEditor value) { var resource = default(object); if (!DefaultCellEditorSelector.TryGetResource(key, out resource)) { value = default(CellEditor); return(false); } else { value = DefaultCellEditorSelector.TryFreeze(resource as CellEditor); return(value != null); } }
private static bool TryGetDataTemplate(object key, out DataTemplate value) { var resource = default(object); if (!DefaultCellEditorSelector.TryGetResource(key, out resource)) { value = default(DataTemplate); return(false); } else { value = DefaultCellEditorSelector.TrySeal(resource as DataTemplate); return(value != null); } }
public static CellEditor SelectCellEditor(Type dataType) { if (dataType == null) { return(null); } if (dataType.IsGenericType && (dataType.GetGenericTypeDefinition() == typeof(Nullable <>))) { dataType = Nullable.GetUnderlyingType(dataType); } var editor = default(CellEditor); if (DefaultCellEditorSelector.TryGetCellEditor(dataType.FullName, out editor)) { return(editor); } return(null); }
public static CellEditor SelectCellEditor(Type dataType) { CellEditor cellEditor = null; if (dataType != null) { if ((dataType.IsGenericType) && (dataType.GetGenericTypeDefinition() == typeof(Nullable <>))) { dataType = Nullable.GetUnderlyingType(dataType); } cellEditor = DefaultCellEditorSelector.ThreadSafeTryFindResource(dataType.FullName) as CellEditor; if (cellEditor != null) { DefaultCellEditorSelector.ThreadSafeTryFreezeEditor(cellEditor); } } return(cellEditor); }
static DefaultCellEditorSelector() { Instance = new DefaultCellEditorSelector(); }
static DefaultCellEditorSelector() { Instance = new DefaultCellEditorSelector(); }