16
WPF DragDrop.DoDragDrop
方法有DragSource
作爲其第一個參數。獲取DoDragDrop DragSource
有沒有辦法在OnDrop
或其他拖放事件中獲得這個DragSource
對象?
WPF DragDrop.DoDragDrop
方法有DragSource
作爲其第一個參數。獲取DoDragDrop DragSource
有沒有辦法在OnDrop
或其他拖放事件中獲得這個DragSource
對象?
簡短的回答是否定的,因爲當你收到一個Drag事件(或DragEnter等)時,拖動源對象可能在任何地方。它可能在另一個過程中。它可以用本地代碼。如果類似RDP的協議足夠複雜以應付它,它甚至可能在另一臺機器上。換句話說,不能保證託管的DoDragDrop甚至被調用,如果它不能保證它從這個過程中被調用。
但如果您正在編寫調用DoDragDrop
,並且還寫OnDrop()
代碼的代碼中,有一個簡單的方法來獲得這種效果:
在調用的DoDragDrop,添加對象作爲額外的格式:
var dragSource = this;
var data = "Hello";
var dataObj = new DataObject(data);
dataObj.SetData("DragSource", dragSource);
DragDrop.DoDragDrop(dragSource, dataObj, DragDropEffects.Copy);
現在在處理ondrag當它是很容易得到拖動源:
protected override void OnDrop(DragEventArgs e)
{
var data = e.Data.GetData(DataFormats.Text);
var dragSource = e.Data.GetData("DragSource");
...
}
在某些情況下,知道源對象本身就足以讓你需要完成拖動操作的數據,在這種情況下,上述歸結爲:
DragDrop.DoDragDrop(dragSource, dragSource, DragDropEffects.Copy);
...
var dragSource = e.Data.GetData(typeof(MyDragSource));
注意,在這兩種情況下,如果拖動操作的來源不是你的代碼(例如從Emplorer中拖出一個文件),你將得到dragSource = null
由於簡短答案是'否',DragDrop的dragSource參數的目的是什麼。的DoDragDrop?它如何被使用? – HappyNomad 2011-07-22 14:26:09