protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseDown(e);

            Point         pos    = e.GetPosition(treeProjects);
            HitTestResult result = VisualTreeHelper.HitTest(treeProjects, pos);
            TreeViewItem  item   = null;

            if (result != null)
            {
                item = ViewHelper.FindVisualParent <TreeViewItem>(result.VisualHit);
            }

            if (e.RightButton == MouseButtonState.Pressed)
            {
                if (item != null)
                {
                    item.IsSelected = true;
                }
            }

            if (e.ClickCount == 2)
            {
                if (item != null && item.DataContext is ViFileInfo)
                {
                    ViFileInfo node = item.DataContext as ViFileInfo;
                    node.DoubleClick(e);
                }

                return;
            }

            dragBoxFromMouseDown = new Rect(pos.X - dragSize.Width / 2, pos.Y - dragSize.Height / 2, dragSize.Width, dragSize.Height);
        }
        private void DoPaste()
        {
            List <ViFileInfo> selectItems = this.SelectedItems;
            ViFileInfo        target      = selectItems.Count == 1 ? selectItems[0] : selectItems[0].GetParent() as ViFileInfo;

            if (target != null)
            {
                target.DoPaste();
            }
        }
        private void TextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            TextBox    tb     = sender as TextBox;
            ViFileInfo target = tb.Tag as ViFileInfo;

            if (target == null)
            {
                return;
            }

            target.Remane(target.Name, tb.Text);
            target.IsEditMode = false;
        }
        private void TextBox_KeyUp(object sender, KeyEventArgs e)
        {
            TextBox    tb  = sender as TextBox;
            ViFileInfo tag = tb.Tag as ViFileInfo;

            if (tag == null)
            {
                return;
            }

            if (e.Key == Key.Escape)
            {
                tag.IsEditMode = false;
            }
            else if (e.Key == Key.Enter)
            {
                tag.Remane(tag.Name, tb.Text);
                tag.IsEditMode = false;
            }
        }
        protected override void OnDrop(DragEventArgs e)
        {
            base.OnDrop(e);
            e.Handled = true;

            //获取当前位置的TreeViewItem
            Point         pos    = e.GetPosition(this.treeProjects);
            HitTestResult result = VisualTreeHelper.HitTest(treeProjects, pos);

            if (result == null)
            {
                return;
            }
            TreeViewItem curItem = ViewHelper.FindVisualParent <TreeViewItem>(result.VisualHit);

            if (curItem == null)
            {
                return;
            }

            //获取目标对象。
            TreeViewItem sourceItem = e.Data.GetData(typeof(TreeViewItem)) as TreeViewItem;

            if (sourceItem == null)
            {
                return;
            }
            //判断及进行执行相关的拖放操作。
            ViFileInfo   curFile    = curItem.DataContext as ViFileInfo;
            ViFileInfo   srcFile    = sourceItem.DataContext as ViFileInfo;
            ViFolderInfo currFolder = curFile is ViFolderInfo ? curFile as ViFolderInfo : curFile.GetParent() as ViFolderInfo;

            if (currFolder == null)
            {
                return;
            }

            currFolder.ModeFileInfo(srcFile);
        }