本帖最后由 charmyu 于 2013-04-07 15:10:31 编辑

解决方案 »

  1.   

    我WPF是初学者,主要的问题是事件绑定,因为上面所有的数据都是动态生成的,绑定不太会用
    同事技术太高,不屑回答我,哎,牛人脾气大啊
      

  2.   

    数据源是TREEVIEWITEM,我现在用样式绑定了一个VLC控件在里面,所以我现在不确定到底按VLC还是TREEVIEWITEM来
      

  3.   

      /// <summary>
            /// 记录开始拖动时的坐标
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void treeview_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                _lastMouseDown = e.GetPosition(treeview);
            }
            private void treeview_MouseMove(object sender, MouseEventArgs e)
            {
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                    Point currentPosition = e.GetPosition(treeview);  //实时坐标
                    if ((Math.Abs(currentPosition.X - _lastMouseDown.X) > 2.0) || (Math.Abs(currentPosition.Y - _lastMouseDown.Y) > 2.0)) //当节点拖动时的坐标(x/y)大于原坐标(x/y)2.0的距离
                    {
                        if ((treeview.SelectedItem as TreeViewItem) != null)
                        {
                            //执行拖拽效果
                            DragDrop.DoDragDrop((treeview.SelectedItem as TreeViewItem), sender, DragDropEffects.Move);
                        }
                    }
                }
            }
      /// <summary>
            /// 检查目标节点合法性
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void treeview_CheckDropTarget(object sender, DragEventArgs e)
            {
                 if(自己处理条件)
                 {
                     e.Effects = DragDropEffects.Move;     //满足条件 
                 }
                 else
                  {
                        e.Effects = DragDropEffects.None;  //不满足条件
                  }            }
                e.Handled = true;        } /// <summary>
            /// 把源节点保存到目标下
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void treeview_Drop(object sender, DragEventArgs e)
            {
                if (e.Source as Canvas!= null)
                {
                    //具体代码自己改, 这里是保存拖动的数据
                    Canvas.Children.Add(treeview.SelectItem);
                }
            }