我想有一个窗口,它可以保持在我可以拖动文件的顶部,这些文件将在某个地方FTP。
我可以处理FTP部分,但我不知道如何使用WPF创建一个窗口,该窗口将监听文件的拖放并删除文件的路径。
编辑:我正在寻找Python WPF版本。
答案 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)
AllowDrop
。DragEnter
和Drop
个事件。在DragEnter
中,您可以限制应用程序允许的文件类型。在Drop
事件中,您必须处理该文件。 如果要限制某些文件类型,请处理DragEnter
,DragOver
和DragLeave
事件,如示例所示。允许删除除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;
}
}
}
}
}
}