void loadPoints(List <string> parentPath, ItemCollection nodes) { Task.Run(() => { try { gatewayClient.EnumDevicePoint(this.Device.Address, parentPath, (info) => { this._container.Dispatcher.Invoke(() => { if (nodes[0] is LoadingTreeItem) { nodes.Clear(); } TreeViewItem node = new TreeViewItem(); node.Header = info.Name; if (info.IsFolder) { LoadingTreeItem loadingNode = new LoadingTreeItem(); loadingNode.Header = "正在加载..."; node.Items.Add(loadingNode); var path = new List <string>(parentPath); path.Add(info.Name); node.Tag = path; node.Expanded += Node_Expanded; } else { node.Tag = info.Path; node.PreviewMouseDown += Point_MouseDown; } nodes.Add(node); }); }); if (nodes[0] is LoadingTreeItem) { this._container.Dispatcher.Invoke(() => { nodes.Clear(); }); } } catch (Exception ex) { this._container.Dispatcher.Invoke(() => { MessageBox.Show(MainWindow.Instance, ex.Message); }); } }); }
/// <summary> /// 显示设备点选择控件 /// </summary> /// <param name="btn"></param> void showPointSelector(Button btn) { if (_popup == null) { TreeView treeview = new TreeView(); treeview.Width = 300; treeview.Height = 500; treeview.Background = System.Windows.Media.Brushes.AliceBlue; LoadingTreeItem loadingNode = new LoadingTreeItem(); loadingNode.Header = "正在加载..."; treeview.Items.Add(loadingNode); loadPoints(new List <string>(), treeview.Items); _popup = new Popup(); _popup.PlacementTarget = btn; _popup.Placement = PlacementMode.Right; _popup.Child = treeview; _popup.StaysOpen = false; } _popup.IsOpen = true; }