WPF treeview控件求助

charmyu 2013-04-07 03:08:28

如图
左边是个TREEVIEW,右边是个CANVAS
问题点如下
如何把左边的TreeViewItem拖动到右边的CANVAS内,并把此图片作为背景显示
如何把左边的TreeViewItem绑定另一个控件,例如VLC,也能拖动到右边?
即左边数据绑定数据及事件,右边控件做成一个容器,可以用来切换背景或者播放视频
...全文
120 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 Pc498471249 的回复:

 /// <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);
            }
        }
wpf现在还是挺流行的嘛
charmyu 2013-06-27
  • 打赏
  • 举报
回复
好老的帖子了,自己解决了,由于保密协议代码不能贴上来 来,散分
Pc498471249 2013-04-10
  • 打赏
  • 举报
回复

 /// <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);
            }
        }
charmyu 2013-04-10
  • 打赏
  • 举报
回复
数据源是TREEVIEWITEM,我现在用样式绑定了一个VLC控件在里面,所以我现在不确定到底按VLC还是TREEVIEWITEM来
Bullatus 2013-04-08
  • 打赏
  • 举报
回复
引用 2 楼 charmyu 的回复:
我WPF是初学者,主要的问题是事件绑定,因为上面所有的数据都是动态生成的,绑定不太会用 同事技术太高,不屑回答我,哎,牛人脾气大啊
你得说明你的数据源的格式,想绑定成什么样式
charmyu 2013-04-07
  • 打赏
  • 举报
回复
我WPF是初学者,主要的问题是事件绑定,因为上面所有的数据都是动态生成的,绑定不太会用 同事技术太高,不屑回答我,哎,牛人脾气大啊
Bullatus 2013-04-07
  • 打赏
  • 举报
回复
网上拖放的例子很多,我也不帮你搜索了,你可以自己找找看。 你这里的问题就是如何处理拖放数据类型而已。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧