如何在WPF中创建一个窗口,等待放入文件?

时间:2015-05-01 18:04:31

标签: python wpf

我想有一个窗口,它可以保持在我可以拖动文件的顶部,这些文件将在某个地方FTP。

我可以处理FTP部分,但我不知道如何使用WPF创建一个窗口,该窗口将监听文件的拖放并删除文件的路径。

编辑:我正在寻找Python WPF版本。

2 个答案:

答案 0 :(得分:2)

您需要启用窗口的AllowDrop属性并处理drop事件。 请参阅下面的代码。

<Window x:Class="ItemsControl_Learning.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:ItemsControl_Learning"
    Title="MainWindow" Height="350" Width="525" Drop="Window_Drop" AllowDrop="True">

private void Window_Drop(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.FileDrop))
        {                
            string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
            foreach (var filePath in filePaths)
            {
                MessageBox.Show(filePath);
            }
        }
    }

答案 1 :(得分:2)

  1. 首先,您需要在窗口中设置属性AllowDrop
  2. 处理DragEnterDrop个事件。在DragEnter中,您可以限制应用程序允许的文件类型。在Drop事件中,您必须处理该文件。
  3. 如果要限制某些文件类型,请处理DragEnterDragOverDragLeave事件,如示例所示。允许删除除jpg以外的所有文件类型。

    XAML:

    <Window x:Class="DragDrop.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525"
            AllowDrop="True" Drop="Window_Drop" DragEnter="Window_DragEnter" DragOver="Window_DragEnter" DragLeave="Window_DragEnter">
        <Grid AllowDrop="True" >
            <Grid.RowDefinitions >
                <RowDefinition Height="*"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
    
            <TextBox Name="TB" Grid.Row="1"/>
        </Grid>
    </Window>
    

    代码背后:

    using System.Windows;
    using System;
    
    namespace DragDrop
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Window_Drop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
                    TB.Text = filePaths[0];
                }
    
            }
    
            private void Window_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
                    if (filePaths != null)
                    {
                        if (filePaths[0].Contains("jpg"))
                        {
                            // JPG is not supported
                            e.Effects = DragDropEffects.None;
                            e.Handled = true;
                        }
                        else
                        {
                            e.Effects = DragDropEffects.Copy;
                        }
                    }
                }
            }
        }
    }