zoukankan      html  css  js  c++  java
  • 拖拽的实现

    实现效果:左键自定义控件上的树节点,将信息拖拽到主窗体的文本框中

    自定义控件: ----拖拽源

    .cs中

    View Code
    private void OnPreviewListBoxMouseMove(object sender, MouseEventArgs e)
    {
    Point pos = e.GetPosition(leftDataTree); //获取mListBox位置
    HitTestResult result = VisualTreeHelper.HitTest(leftDataTree, pos); //获取mListBox信息
    TreeViewItem listBoxItem = Utils.FindVisualParent<TreeViewItem>(result.VisualHit); //找到实际要拖拽的
    if (listBoxItem == null || listBoxItem.DataContext != leftDataTree.SelectedItem || !(leftDataTree.SelectedItem is DataTreeModel))
    return;
    if (((DataTreeModel)listBoxItem.DataContext).Parent == null)
    return;
    #region 复制效果
    //DragDropAdorner adorner = new DragDropAdorner(listBoxItem);
    //mAdornerLayer = AdornerLayer.GetAdornerLayer(mTopLevelGrid);
    //mAdornerLayer.Add(adorner);
    #endregion
    
    DataTreeModel dataItem = listBoxItem.DataContext as DataTreeModel;
    DataObject dataObject = new DataObject(dataItem);
    System.Windows.DragDrop.DoDragDrop(leftDataTree, dataObject, DragDropEffects.Copy);
    
    //mAdornerLayer.Remove(adorner); //复制完后删除效果
    }
    View Code
        internal static class Utils
        {
            /// <summary>
            /// 复制
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="obj"></param>
            /// <returns></returns>
            public static T FindVisualParent<T>(DependencyObject obj) where T : class
            {
                while (obj != null)
                {
                    if (obj is T)
                        return obj as T;
                    obj = VisualTreeHelper.GetParent(obj);
                }
                return null;
            }
        }

    .xaml中

      <TreeView Height="700"  HorizontalAlignment="Left" x:Name="leftDataTree"  
                      VerticalAlignment="Top" Width="200" ItemsSource="{Binding DataTreeNode}" SelectedItemChanged="leftDataTree_SelectedItemChanged" >

    主窗体:  ----接收数据

    .cs中

    View Code
            private void OnDragOver(object sender, DragEventArgs e)
            {
                e.Handled = true;
                e.Effects = DragDropEffects.Copy; 
            }

    .xaml中

       <TextBox Name="txtinfo" TextWrapping="Wrap" AllowDrop="True" PreviewDragOver="OnDragOver"/>

    最后你会发现,其实拖拽源和接收数据是分开的,两个独立的功能块。用起来很爽。(但是有些第三方控件不支持拖拽,坑爹啊)

  • 相关阅读:
    window
    pages
    百度小程序 配置 app.json 文件
    JavaScript Cookie
    jQuery ajax
    jQuery ajax
    jQuery ajax
    jQuery
    jQuery
    jQuery
  • 原文地址:https://www.cnblogs.com/pingping/p/2593496.html
Copyright © 2011-2022 走看看