예제 #1
0
        private static void SelectPath(TreeView treeView, string value)
        {
            if (value == null)
            {
                TreeViewItem item = treeView.SelectedItem as TreeViewItem;
                if (item != null)
                {
                    item.IsSelected = false;
                }
            }
            else
            {
                value = NormalizePath(value);

                var paths = SubPaths(value);
                FoldersTreeViewItem currentItem = treeView.Items[0] as FoldersTreeViewItem;

                bool needSelect = true;

                foreach (var path in paths)
                {
                    currentItem.IsExpanded = true;
                    var childItem = currentItem.Items.OfType<FoldersTreeViewItem>().FirstOrDefault(i => path.Equals((i.Tag as FolderInfo)?.Path, StringComparison.OrdinalIgnoreCase));

                    if (childItem != null)
                    {
                        currentItem = childItem;
                    }
                    else
                    {
                        needSelect = false;
                    }
                }

                if (needSelect)
                {
                    //currentItem.IsExpanded = true;
                    currentItem.IsSelected = true;

                    MethodInfo selectMethod = typeof(TreeViewItem).GetMethod("Select", BindingFlags.NonPublic | BindingFlags.Instance);

                    selectMethod.Invoke(currentItem, new object[] { true });

                    currentItem.BringIntoView();
                    //treeView.Focus();

                    // TODO: notify property changed
                }
            }
        }
예제 #2
0
        private FoldersTreeViewItem CreateItem(FolderInfo folderInfo)
        {
            var item = new FoldersTreeViewItem();

            item.Header = folderInfo.Title;
            item.Tag = folderInfo;
            item.Expanded += new RoutedEventHandler(folder_Expanded);

            if (folderInfo.Path != null)
            {
                item.Items.Add(null);
            }
            
            return item;
        }
예제 #3
0
        protected override void OnSelectedItemChanged(RoutedPropertyChangedEventArgs<object> e)
        {
            base.OnSelectedItemChanged(e);

            FoldersTreeViewItem temp = (FoldersTreeViewItem)this.SelectedItem;

            if (temp != null)
            {

                var folderInfo = temp.Tag as FolderInfo;


                SelectedPath = folderInfo.Path;
            }
        }
예제 #4
0
        void folder_Expanded(object sender, RoutedEventArgs e)
        {
            FoldersTreeViewItem item = (FoldersTreeViewItem)sender;
            if (item.Items.Count == 1 && item.Items[0] == null)
            {
                item.Items.Clear();
                try
                {
                    var folderInfo = item.Tag as FolderInfo;
                    foreach (string s in GetDirectories(folderInfo.Path))
                    {                        
                        item.Items.Add(CreateItem(new FolderInfo() { Title = Path.GetFileName(s), Path = s, Icon = GetIcon(s) }));
                    }
                }
                catch (Exception)
                {

                }
            }
        }