简体   繁体   English

在WPF中拖放路径

[英]Drag and drop a path in a wpf

Is it possible to drag and drop a path in a wpf using Mouse Eventhandlers? 是否可以使用Mouse Eventhandlers在wpf中拖放路径? In partcular I want to drag a path with the left mouse button and to mouse it on the grid. 特别是我想用鼠标左键拖动一个路径,然后将其鼠标放在网格上。 How can this be done? 如何才能做到这一点?

Try this: 尝试这个:

Given: TextBox name is "TextBox1" 给定:TextBox名称为“ TextBox1”

    public MainWindow()
    {
        // Initialize UI
        InitializeComponent();

        // Loaded event
        this.Loaded += delegate
            {
                TextBox1.AllowDrop = true;
                TextBox1.PreviewDragEnter += TextBox1PreviewDragEnter;
                TextBox1.PreviewDragOver += TextBox1PreviewDragOver;
                TextBox1.Drop += TextBox1DragDrop;
            };
    }

    /// <summary>
    /// We have to override this to allow drop functionality.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    void TextBox1PreviewDragOver(object sender, DragEventArgs e)
    {
        e.Handled = true;
    }

    /// <summary>
    /// Evaluates the Data and performs the DragDropEffect
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void TextBox1PreviewDragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.FileDrop))
        {
            e.Effects = DragDropEffects.Copy;
        }
        else
        {
            e.Effects = DragDropEffects.None;
        }
    }

    /// <summary>
    /// The drop activity on the textbox.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void TextBox1DragDrop(object sender, DragEventArgs e)
    {
        // Get data object
        var dataObject = e.Data as DataObject;

        // Check for file list
        if (dataObject.ContainsFileDropList())
        {
            // Clear values
            TextBox1.Text = string.Empty;

            // Process file names
            StringCollection fileNames = dataObject.GetFileDropList();
            StringBuilder bd = new StringBuilder();
            foreach (var fileName in fileNames)
            {
                bd.Append(fileName + "\n");
            }

            // Set text
            TextBox1.Text = bd.ToString();
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM