Ejemplo n.º 1
0
        private void TreeView_Expanded(object sender, RoutedEventArgs e)
        {
            TreeViewItem currentTreeNode = sender as TreeViewItem;

            if (currentTreeNode == null)
            {
                return;
            }

            if (currentTreeNode.ItemsSource == null)
            {
                return;
            }

            DirInfo parentDirectory = currentTreeNode.Header as DirInfo;

            if (parentDirectory == null)
            {
                return;
            }

            foreach (DirInfo d in currentTreeNode.ItemsSource)
            {
                if (myViewModel.CurrentDirectory.Path.Equals(d.Path))
                {
                    d.IsSelected = true;
                    d.IsExpanded = true;
                    break;
                }
            }

            DirInfo _current = (currentTreeNode.DataContext as DirInfo);

            _current.IsSelected = true;

            if (currentTreeNode.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
            {
                EventHandler itemsGenerated = null;
                itemsGenerated = delegate(object s, EventArgs args)
                {
                    if ((s as ItemContainerGenerator).Status == GeneratorStatus.ContainersGenerated)
                    {
                        (s as ItemContainerGenerator).StatusChanged -= itemsGenerated;
                        currentTreeNode.Dispatcher.BeginInvoke(DispatcherPriority.DataBind, (ThreadStart) delegate
                        {
                            Mouse.OverrideCursor = null;
                            _current.SetValue(FileSystemTree.IsLoadingVisibleProperty, false);
                        });
                    }
                };
                currentTreeNode.ItemContainerGenerator.StatusChanged += itemsGenerated;
                Mouse.OverrideCursor = Cursors.Wait;
                _current.SetValue(FileSystemTree.IsLoadingVisibleProperty, true);
                try
                {
                    Helpers.DoEvents();
                }
                catch { }
            }

            foreach (DirInfo _child in _current.SubDirectories)
            {
                if (_current.IsChecked2.HasValue)
                {
                    _child.IsChecked2 = _current.IsChecked2;
                }
            }

            e.Handled = true;
        }