private static XamDataTreeCommandBehavior GetOrCreateCommandBehavior(XamDataTree menuItem) { if (!(menuItem.GetValue(SelectedCommandBehaviorProperty) is XamDataTreeCommandBehavior behavior)) { behavior = new XamDataTreeCommandBehavior(menuItem); menuItem.SetValue(SelectedCommandBehaviorProperty, behavior); } return(behavior); }
private static void OnCommandParameterChangeCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { XamDataTree menuItem = d as XamDataTree; if (menuItem != null) { XamDataTreeCommandBehavior behavior = GetOrCreateCommandBehavior(menuItem); behavior.CommandParameter = e.NewValue; } }
private static void OnSetCommandParameterCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { XamDataTree tree = dependencyObject as XamDataTree; if (tree != null) { XamDataTreeNodeUnselectedCommandBehavior behavior = GetOrCreateBehavior(tree); behavior.CommandParameter = e.NewValue; } }
private static void OnSetCommandCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { XamDataTree menuItem = dependencyObject as XamDataTree; if (menuItem != null) { XamDataTreeNodeActivatedCommandBehavior behavior = GetOrCreateBehavior(menuItem); behavior.Command = e.NewValue as ICommand; } }
private static XamDataTreeNodeUnselectedCommandBehavior GetOrCreateBehavior(XamDataTree tree) { XamDataTreeNodeUnselectedCommandBehavior behavior = tree.GetValue(DataItemUnselectedProperty) as XamDataTreeNodeUnselectedCommandBehavior; if (behavior == null) { behavior = new XamDataTreeNodeUnselectedCommandBehavior(tree); tree.SetValue(DataItemUnselectedProperty, behavior); } return(behavior); }
private static XamDataTreeNodeActivatedCommandBehavior GetOrCreateBehavior(XamDataTree menuItem) { XamDataTreeNodeActivatedCommandBehavior behavior = menuItem.GetValue(SelectedCommandBehaviorProperty) as XamDataTreeNodeActivatedCommandBehavior; if (behavior == null) { behavior = new XamDataTreeNodeActivatedCommandBehavior(menuItem); menuItem.SetValue(SelectedCommandBehaviorProperty, behavior); } return(behavior); }
private static AccountVM GetSelectedAcccount(XamDataTree dataTree) { if (dataTree != null) { var actNode = dataTree.ActiveNode; if (actNode != null) { return(actNode.Data as AccountVM); } } return(null); }
private static void OnDefaultSelectedDataItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { XamDataTree tree = (XamDataTree)d; if (e.NewValue == null) { return; } if (tree.SelectionSettings.SelectedNodes.Count > 1) { return; } tree.Loaded += Tree_Loaded; }
private static void Tree_Loaded(object sender, RoutedEventArgs e) { XamDataTree tree = (XamDataTree)sender; tree.Loaded -= Tree_Loaded; var node = FindTreeNodeFromDataItem(tree, tree.GetValue(DefaultSelectedDataItemProperty)); if (node != null) { if (!node.IsSelected) { node.IsSelected = true; node.IsActive = true; } } }
/// <summary> /// Поиск и раскрытие объекта в дереве /// </summary> /// <param name="founded"></param> /// <param name="selItem"></param> /// <param name="xamTree"></param> /// <param name="isExpandLast"></param> /// <param name="isSelect"></param> public static void ExpandAndSelectXamTree(Dictionary <object, Stack> founded, object selItem, XamDataTree xamTree, bool isExpandLast = false, bool isSelect = true) { if (founded == null) { return; } Stack stack; if (!founded.TryGetValue(selItem, out stack)) { return; } ExpandAndSelectXamTree(stack, selItem, xamTree, isExpandLast, isSelect); }
private void OnRemoveAccount(XamDataTree dataTree) { AccountVM acct = GetSelectedAcccount(dataTree); if (acct == null) { return; } string prompt = string.Format("你确定要删除 {0} ?", acct.InvestorId); MessageBoxResult res = MessageBox.Show(System.Windows.Application.Current.MainWindow, prompt, "删除帐户", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (res == MessageBoxResult.Yes) { this._accounts.Remove(acct); Persist(); } }
public static void ExpandAndSelectXamTree(Stack stack, object selItem, XamDataTree xamTree, bool isExpandLast = false, bool isSelect = true) { if (stack != null) { var hierItem = selItem as FreeHierarchyTypeTreeItem; if (hierItem != null) { var stackTree = new Stack <FreeHierarchyTypeTreeItem>(); for (int i = stack.Count - 1; i >= 0; i--) { stackTree.Push(stack.ToArray()[i] as FreeHierarchyTypeTreeItem); } xamTree.ExpandAndSelectXamTree(stackTree, isExpandLast, isSelect); } else { var arr = new object[stack.Count]; stack.CopyTo(arr, 0); Array.Reverse(arr); var chain = new ConcurrentStack <object>(arr); xamTree.ExpandAndSelectXamTreeAsync(chain, isExpandLast); } //MoveUp(xamTree); } // Если элемент не найден в дереве, то нужно подгрузить ветку else { var findedNodeResult = selItem as UaFindNodeResult; if (findedNodeResult != null) { ExpandAndSelectUaNodeXamTree(findedNodeResult, xamTree); //MoveUp(xamTree); } else { ExpandAndSelectHierObject(selItem, xamTree); } } }
private void OnEditAccount(XamDataTree dataTree) { AccountVM acct = GetSelectedAcccount(dataTree); if (acct == null) { return; } EditAccountDlg addAcctDlg = new EditAccountDlg(); addAcctDlg.Owner = Application.Current.MainWindow; addAcctDlg.ViewModel = acct; bool?ret = addAcctDlg.ShowDialog(); if (ret ?? false) { Persist(); } }
private static object CoerceUnselectedDataItem(DependencyObject d, object value) { XamDataTree tree = (XamDataTree)d; if (value == null) { return(value); } var node = FindTreeNodeFromDataItem(tree, value); if (tree.SelectionSettings.SelectedNodes.Contains(node)) { tree.SelectionSettings.SelectedNodes.Remove(node); node.IsActive = false; node.IsChecked = false; } return(value); }
public static XamDataTreeNode FindTreeNodeFromDataItem(XamDataTree tree, object dataItem) { XamDataTreeNode targetNode = null; Action <XamDataTreeNode, object> findNode = (n, dItem) => { if (n.HasChildren) { foreach (var item in n.Nodes) { if (targetNode != null) { return; } if (item.Data == dItem) { targetNode = item; } } } }; foreach (var node in tree.Nodes) { if (node.Data == dataItem) { return(node); } } foreach (var node in tree.Nodes) { if (targetNode == null) { findNode(node, dataItem); } } return(targetNode); }
private static void OnSelectedDataItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { XamDataTree tree = (XamDataTree)d; if (e.NewValue == null) { return; } var node = FindTreeNodeFromDataItem(tree, e.NewValue); if (node != null) { if (!tree.SelectionSettings.SelectedNodes.Contains(node)) { tree.SelectionSettings.SelectedNodes.Add(node); node.IsActive = true; node.IsChecked = true; } } }
private XamDataTree CreateXamDataTree() { XamDataTree MyTree = new XamDataTree(); ExperimentNode experiment1 = new ExperimentNode("Experiment1"); CompoundsGroupNode compoundsGroup = new CompoundsGroupNode("CompoundsGroup1"); ClusterNode cluster = new ClusterNode("Cluster1"); cluster.AddChild(new ExperimentNode("Experiment2")); ExperimentNode experiment3 = new ExperimentNode("Experiment3"); experiment3.HoverText = "My experiment"; experiment3.AddChild(new CompoundsGroupNode("CompoundsGroup2")); experiment3.AddChild(new CompoundsGroupNode("CompoundsGroup3")); cluster.AddChild(experiment3); experiment1.AddChild(compoundsGroup); experiment1.AddChild(cluster); MyTree.ItemsSource = new ObservableCollection <IDataNode> { experiment1 }; NodeLayout mylayout = new NodeLayout(); mylayout.Key = "NodeLayout1"; mylayout.TargetTypeName = "IDataNode"; mylayout.DisplayMemberPath = "Name"; MyTree.GlobalNodeLayouts.Add(mylayout); return(MyTree); }
public static void ExpandAndSelectXamTree(this XamDataTree tree, Stack <FreeHierarchyTypeTreeItem> chain, bool isExpandLast , bool isSelect = true) { tree.SelectionSettings.SelectedNodes.Clear(); Action <XamDataTreeNodesCollection> expandAndSelect = null; expandAndSelect = delegate(XamDataTreeNodesCollection list) { var item = chain.Pop(); var find = list.FirstOrDefault(n => (n.Data as FreeHierarchyTypeTreeItem).FreeHierTree_ID == item.FreeHierTree_ID); if (find == null) { return; } if (chain.Count == 0) { if (isExpandLast) { find.IsExpanded = true; } if (isSelect) { find.IsSelected = true; } tree.SelectionSettings.SelectedNodes.Add(find); tree.ScrollNodeIntoView(find); //tree.BringIntoView(); } else { find.IsExpanded = true; expandAndSelect(find.Nodes); } }; expandAndSelect(tree.Nodes); }
public static ICommand GetCommand(XamDataTree tree) { return(tree.GetValue(CommandProperty) as ICommand); }
public static void SetCommandProperty(XamDataTree menuItem, object parameter) { menuItem.SetValue(CommandParameterProperty, parameter); }
public static object GetCommandParameter(XamDataTree menuItem) { return(menuItem.GetValue(CommandParameterProperty)); }
public static object GetCommandParameter(XamDataTree tree) { return(tree.GetValue(CommandParameterProperty)); }
public static string GetDefaultSelectedDataItem(XamDataTree tree) { return(tree.GetValue(DefaultSelectedDataItemProperty) as string); }
/// <summary> /// Разворачиваем объект в дереве с подгрузкой узлов /// </summary> /// <param name="tree"></param> /// <param name="chain"></param> /// <param name="isExpandLast"></param> /// <param name="isSelect"></param> /// <param name="afterFound">Действие после нахождения нужного элемента</param> public static void ExpandAndSelectXamTreeAsync(this XamDataTree tree, ConcurrentStack <object> chain, bool isExpandLast , bool isSelect = true, Action <XamDataTreeNode> afterFound = null) { tree.SelectionSettings.SelectedNodes.Clear(); Action <XamDataTreeNodesCollection> expandAndSelect = null; //var isFirst = true; //CancellationTokenSource tokenSource = null; expandAndSelect = delegate(XamDataTreeNodesCollection list) { object item; if (!chain.TryPop(out item)) { //if (tokenSource != null) tokenSource.Cancel(); //WaitPanel.Hide<object>(tree, null, null); return; } var find = list.FirstOrDefault(n => n.Data.Equals(item)); if (find == null) { //if (tokenSource != null) tokenSource.Cancel(); //WaitPanel.Hide<object>(tree, null, null); return; } if (chain.Count == 0) { try { //if (isSelect) { tree.SelectionSettings.SelectedNodes.Add(find); find.IsSelected = true; } if (isExpandLast) { find.IsExpanded = true; } tree.ScrollNodeIntoView(find); FindBar.MoveSelectedNodeIntoCenter(tree); } finally { if (afterFound != null) { afterFound(find); } //if (tokenSource != null) tokenSource.Cancel(); //WaitPanel.Hide<object>(tree, null, null); } //}), DispatcherPriority.Send); //tree.BringIntoView(); } else { find.IsExpanded = true; expandAndSelect(find.Nodes); //tree.Dispatcher.BeginInvoke((Action)(() => //{ // expandAndSelect(find.Nodes); //}), DispatcherPriority.Send); } }; expandAndSelect(tree.Nodes); }
private static void ExpandAndSelectUaNodeXamTree(UaFindNodeResult findedNodeResult, XamDataTree xamTree) { if (!findedNodeResult.FdUaNodeId.HasValue) { return; } //Родитель через который идет переход на обычные узлы FreeHierarchy var parentNode = UAHierarchyDictionaries.UANodesDict[findedNodeResult.FdUaNodeId.Value]; if (parentNode == null) { return; } //Непосредственный родитель var pathToFounded = new ConcurrentStack <object>(); #if DEBUG var sw = new System.Diagnostics.Stopwatch(); sw.Start(); #endif var foundedObject = FinderHelper.FindFirstElementAsync(xamTree.ItemsSource as IEnumerable <object>, parentNode, pathToFounded); #if DEBUG sw.Stop(); Console.WriteLine("Поиск 1 {0} млс", sw.ElapsedMilliseconds); #endif var treeItem = foundedObject as FreeHierarchyTreeItem; if (treeItem != null && treeItem.Descriptor != null) { //Подгружаем объекты treeItem.ReloadUaNodeBranch(new Queue <long>(findedNodeResult.ParentIds.Skip(1))); } pathToFounded.Clear(); #if DEBUG sw.Restart(); #endif foundedObject = FinderHelper.FindFirstElementAsync(xamTree.ItemsSource as IEnumerable <object>, findedNodeResult.Node, pathToFounded); #if DEBUG sw.Stop(); Console.WriteLine("Поиск 2 {0} млс", sw.ElapsedMilliseconds); #endif //На данный момент объект подгружен, просто позиционируем на него if (foundedObject != null && pathToFounded.Count > 0) { xamTree.ExpandAndSelectXamTreeAsync(pathToFounded, false); } }
public static XamDataTreeNode ExpandAndSelectHierObject(object hierarchyObject, XamDataTree xamTree) { var pathToFounded = new ConcurrentStack <object>(); #if DEBUG var sw = new System.Diagnostics.Stopwatch(); sw.Start(); #endif var source = xamTree.ItemsSource as IEnumerable <object>; if (source == null) { return(null); } var foundedObject = FinderHelper.FindFirstElementAsync(source, hierarchyObject, pathToFounded); #if DEBUG sw.Stop(); Console.WriteLine("Поиск {0} млс", sw.ElapsedMilliseconds); #endif if (foundedObject == null || pathToFounded.Count <= 0) { return(null); } return(xamTree.ExpandAndSelectXamTreeSync(pathToFounded, true)); }
public static void SetDefaultSelectedDataItem(XamDataTree tree, object value) { tree.SetValue(DefaultSelectedDataItemProperty, value); }
public static ICommand GetCommand(XamDataTree menuItem) { return(menuItem.GetValue(CommandProperty) as ICommand); }
public static void SetCommand(XamDataTree menuItem, ICommand command) { menuItem.SetValue(CommandProperty, command); }
public static void SetCommandParameter(XamDataTree tree, object parameter) { tree.SetValue(CommandParameterProperty, parameter); }