public NodeControl RenderSkinElements(INodeProxy node, string skinName, Dictionary <string, object> skinProperties) { NodeControl nodeElement = null; try { nodeElement = new NodeControl(); nodeElement.DataContext = node; foreach (string propertyName in skinProperties.Keys) { PropertyInfo propInfo = nodeElement.GetType().GetProperty(propertyName); Type propertyType = propInfo.PropertyType; if (propertyType != typeof(string)) { TypeConverter converter = GetTypeConverter(propertyType); object obj = converter.ConvertFrom(skinProperties[propertyName]); propInfo.SetValue(nodeElement, obj, null); } else { propInfo.SetValue(nodeElement, skinProperties[propertyName], null); } } } catch (Exception) { nodeElement = null; } // TODO: Load an 'ApplicationSettings' object here so that the NodeFontSize can be determined through application/user settings. return(nodeElement); }
internal void SortColumn(TreeColumn column) { if (column == null) { return; } var nodes = ((TreeModel)Model).Nodes.ToList(); nodes.Sort(delegate(Node node1, Node node2) { NodeControl nodeControl = NodeControls.FirstOrDefault(control => control.ParentColumn == column); if (nodeControl == null) { return(0); } string propName = nodeControl.GetType().GetProperty("DataPropertyName").GetValue(nodeControl, null).ToString(); object obj1 = node1.GetType().GetProperty(propName).GetValue(node1, null); object obj2 = node2.GetType().GetProperty(propName).GetValue(node2, null); string value1 = (obj1 == null) ? string.Empty : obj1.ToString(); string value2 = (obj2 == null) ? string.Empty : obj2.ToString(); return(column.SortOrder == SortOrder.Ascending ? value1.CompareTo(value2) : value2.CompareTo(value1)); }); ((TreeModel)Model).Nodes.Clear(); foreach (var node in nodes) { ((TreeModel)Model).Nodes.Add(node); } Invalidate(); Update(); Refresh(); }
internal void SortColumn(NamedTreeColumn column) { if (column == null) { return; } List <ModNode> nodes = null; switch (column.Name) { case ModSelectionColumnsInfo.COLUMNMOD: nodes = ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Cast <ModNode>().ToList(); nodes.Sort(delegate(ModNode node1, ModNode node2) { if (column.SortOrder == SortOrder.Ascending) { return(node1.Text.CompareTo(node2.Text)); } else { return(node2.Text.CompareTo(node1.Text)); } }); ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Clear(); foreach (ModNode modNode in nodes) { ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Add(modNode); } break; default: nodes = ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Cast <ModNode>().ToList(); nodes.Sort(delegate(ModNode node1, ModNode node2) { NodeControl nodeControl = null; foreach (NodeControl control in tvModSelection.NodeControls) { if (control.ParentColumn == column) { nodeControl = control; break; } } string propName = nodeControl.GetType().GetProperty("DataPropertyName").GetValue(nodeControl, null).ToString(); object obj1 = node1.GetType().GetProperty(propName).GetValue(node1, null); object obj2 = node2.GetType().GetProperty(propName).GetValue(node2, null); string value1 = (obj1 == null) ? string.Empty : obj1.ToString(); string value2 = (obj2 == null) ? string.Empty : obj2.ToString(); if (column.SortOrder == SortOrder.Ascending) { return(value1.CompareTo(value2)); } else { return(value2.CompareTo(value1)); } }); ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Clear(); foreach (ModNode modNode in nodes) { ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Add(modNode); } break; } InvalidateView(); }