Tag: 拖放

滚动时禁用拖放

我已经在WPF中为TreeView实现了拖放function。 一切正常但是当滚动显示在树视图中时,如果我在树中选择一个项目,然后尝试滚动(垂直或水平),TreeView会尝试执行拖放操作。 这是源代码: class TreeViewRearranger { private TreeView mTreeView; private int MOVE_TOLERANCE = 10; private TreeViewItem mDraggedItem = null; private TreeViewItem mTargetDrop = null; private DropAdorner mDropAdorner = null; public void Initialize(TreeView treeView) { mTreeView = treeView; SetupDragDropEvents(); } private void SetupDragDropEvents() { mTreeView.MouseDown += mTreeView_MouseDown; mTreeView.MouseMove += mTreeView_MouseMove; mTreeView.DragOver += mTreeView_DragOver; mTreeView.Drop += mTreeView_Drop; […]

删除的zip文件会导致e.Data.GetData(“FileContents”)抛出exception

我正在尝试在我的WPF应用程序中为从zip存档拖动的文件实现一个处理程序。 处理程序应获取文件内容以供进一步处理。 我的环境:安装了Windows7,7-zip,Visual Studio 2012 Express,.Net 4.5 以下是一个简单的MainWindow应用程序的代码,用于演示此问题: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); AllowDrop= true; Drop += onDrop; } private void onDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(“FileContents”)) { var fileContents = e.Data.GetData(“FileContents”); //get file contents… } } } 当我将zip存档中包含的文件拖到我的Window时,对e.Data.GetData(“FileContents”)的调用将使用以下callstack抛出System.ArgumentException(“Argument out of Range”): System.Windows.DataObject.OleConverter.GetDataInner(formatetc, medium) System.Windows.DataObject.OleConverter.GetDataFromOleHGLOBAL(format, aspect, index) System.Windows.DataObject.OleConverter.GetDataFromBoundOleDataObject(format, […]

WPF中的可拖动控件?

虽然我有一些Forms的经验,但我还是WPF的新手,我决定最终尝试弄清楚如何使用WPF。 所以,当我得到可拖动的控件时,这就是我想出的代码(我试图改变它以使用WPF,但控件只是抽搐到处): private void rectangle1_MouseMove(object sender, MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { double x = this.Left + (double)e.GetPosition(this).X – (double)rectangle1.Margin.Left; double y = this.Top + (double)e.GetPosition(this).Y – (double)rectangle1.Margin.Top; rectangle1.Margin = new Thickness(x, y, rectangle1.Margin.Right, rectangle1.Margin.Bottom); } }

如何在同一ListView中拖放项目?

考虑这是一个显示文件和文件夹的ListView,我已经为复制/移动/重命名/显示属性等编写了代码,我只需要再做一件事了。 如何在Windows资源管理器中拖放相同的ListView,我有移动和复制function,我只需要获取用户在某个文件夹中丢弃的项目或以其他方式我需要获取这两个参数来调用复制function void copy(ListViewItem [] droppedItems, string destination path) { // Copy target to destination }

在wpf c#中重新排列wrappanel内的CustomControl

我在一个wrappanel中动态创建一个customcontrol。 现在我需要重新排序wrappanel内的自定义控件。 是否可以使用拖放重新排列wrappanel内的自定义控件? 这是我的XAML代码 我已经尝试将包装面板放在列表中,因为它是由给定答案(Ilan的答案)建议的,现在我的面板无法在后面的代码中访问。 我做错了什么?

使用.Net检测外部应用程序中的拖放操作

我需要检测外部应用程序中的拖放操作,是否可能? 我想写一个钩子来检测这些操作。 任何人都可以指出我正确的方向,我可以尝试挂钩哪些消息或api函数来检测拖放事件? 我想在C#中这样做。 提前致谢。

尝试从chrome实现拖放gmail附件

我一直在尝试将chrome中的gmail附件拖放到我的应用程序中。 可以将文件从电子邮件拖到桌面,然后在那里创建附件,所以我知道这一定是可能的。 我已经能够让它读取文件名,但是当我从数据对象中读取FileContents时,我得到一个带有文件链接的Internet快捷方式。 有人有过这个工作吗? 目前的代码是.txt文件的硬编码 示例项目可以从以下位置下载: https://www.dropbox.com/s/jz4zde0mvgxzn1g/DragDropTest.zip?dl=0 我的主要DataObjectWrapper类如下: 发布所有内容的字符太多但主要方法是: public object GetDataNative(string format, bool autoConvert) { switch (format) { case CFSTR_FILEDESCRIPTOR_A: IntPtr fileGroupDescriptorAPointer = IntPtr.Zero; try { //use the underlying IDataObject to get the FileGroupDescriptor as a MemoryStream MemoryStream fileGroupDescriptorStream = (MemoryStream)this.underlyingDataObject.GetData(CFSTR_FILEDESCRIPTOR_A, autoConvert); byte[] fileGroupDescriptorBytes = new byte[fileGroupDescriptorStream.Length]; fileGroupDescriptorStream.Read(fileGroupDescriptorBytes, 0, fileGroupDescriptorBytes.Length); fileGroupDescriptorStream.Close(); //copy the file […]

C# – 将列表视图中的项目拖到垃圾桶中?

如何将项目从Winforms-listview控件拖到另一个控件(垃圾桶图片)? UPDATE1: 我认为基本流程是: 对于listview上的ItemDrag事件,有一个DoDragDrop 然后在图片框上有一个捕获该拖动的DragEnter事件? UPDATE2: 基本流程(基于答案): 将’ItemDrag’事件添加到列表视图中。 在’ItemDrag’中添加’DoDragDrop’ 将’DragEnter’事件添加到图片框中。 在“DragEnter”中添加“GetDataPresent”检查以检查数据类型 将“DragDrop”事件添加到图片框中 在“DragEnter”中添加“GetDataPresent”检查以检查数据类型

c#拖放listview

我有一个列表框,我将其拖入ListView。 现在我在ListView中有组,所以当ListView中的项目被删除时,它必须在该组下添加它。 这是处理丢弃的代码。 private void lstvPositions_DragDrop(object sender, DragEventArgs e) { var group = lstvPositions.GetItemAt(eX, eY); var item = e.Data.GetData(DataFormats.Text).ToString(); lstvPositions.Items.Add(new ListViewItem {Group = group.Group, Text = item}); } 我没有找到可以给groupitem的函数,所以我使用了GetItemAt,我也可以从中访问listviewgroup。 但是GetItemAt总是返回null。 难道我做错了什么? 有没有更好的方法来实现这一目标?

在WPF DataGrid上拖动Drop Row行为

我正在尝试通过执行Drag & Drop来重新排序行 我发现了一些解决方案(在Stackoverflow上并通过谷歌搜索)并使用它们我试图做出行为……我从Hordcodenet网站上拿了例子(我现在没有链接) 码 public static class DragDropRowBehavior { private static DataGrid dataGrid; private static Popup popup; private static bool enable; private static object draggedItem; public static object DraggedItem { get { return DragDropRowBehavior.draggedItem; } set { DragDropRowBehavior.draggedItem = value; } } public static Popup GetPopupControl(DependencyObject obj) { return (Popup)obj.GetValue(PopupControlProperty); } public static void […]