有時候我們方便使用者操作,總會把一下copy/paste 或者 input操作轉換為drag/drop, wpf 跟之前winform 一樣提供了一些實現方式方便開發人員進行開發。
要允許控制項drop操作,首先必須設定控制項屬性allowdrop,這樣控制項才能產生dragover/dragenter/drop等相關事件,從而開發人員可以做一些邏輯判斷,設定drageventargs 的屬性effects 決定drag的內容是否允許drop. 下面是乙個簡單的例子:
建立兩個listbox, 乙個裡面有內容(名字為:employeesource),另外乙個(名字:selectedemployees)沒有內容,允許使用者從employeesource 拖拽內容到selectedemployees。
1. 在xaml中建立這兩個listbox, 並進行相關資料繫結
2. 在cs檔案中實現相關事件函式
bool bmousedown = true;
private void employeesource_mousemove(object sender, system.windows.input.mouseeventargs e)
dragdrop.dodragdrop(employeesource, selected, dragdropeffects.copy);
}private void selectedemployees_drop(object sender, system.windows.drageventargs e)
}private void selectedemployees_dragover(object sender, system.windows.drageventargs e)
dragelement = ems[0];
e.effects = dragdropeffects.copy;
}
3. 增加datacontext(viewmodel), 設定繫結的屬性
public class employeelist : inotifypropertychanged
}public employeelist()
catch
}private employees _employees = new employees();
public employees employees
}} public class employeesitem : inotifypropertychanged
}
public override bool equals(object obj)
private string _description = string.empty;
public string description
set}
} }public class employees : system.collections.objectmodel.observablecollection
用 QT實現拖放(drag drop)功能
qt的 qdrag 和 qdrop功能在qt的 puzzle 示例中有介紹。但是那個介紹是以qlistwidget為基礎的。本文以qwidget為基礎,介紹如何實現拖放。拖放可以用qstring作為資訊載體,也可以使用html等型別。本文採用qbytearray。qbytearray允許程式設計師使...
WPF 實現縮放移動
熟悉wpf 的朋友應該知道canvas 預設是不支援scale 和offset 操作的,如果我們想對canvas 裡包含的控制項進行整體縮放或移動可能會比較麻煩。kael rowan 提供了zoomablecanvas 類可以方便實現上述效果。我們可以在xaml 中直接使用對控制項布局進行開發,而不...
WPF實現控制項拖動
實現控制項拖動的基本原理是對滑鼠位置的捕獲,同時根據滑鼠按鍵的按下 釋放確定控制項移動的幅度和時機。簡單示例 在grid中有乙個button,通過滑鼠事件改編button的margin屬性,從而改變button在grid中的相對位置。gd 90 height 30 name btn button 為...