原文地址 https://www.cnblogs.com/younShieh/p/10811456.htmlhtml
前文
- 本文只對筆者學習掌握的通常的拖動問題的實現方法進行整理和討論,包括窗口、控件等內容的拖動。
- 但願本文能對一些尋找此問題的解決方法的人和一些剛入門的人一些幫助,能獲得各位的批評指正也是榮幸萬分。有更好的方法,勞煩與我分享,不勝感激。
- 本文的各類實現方法其它博客中也都有涉及,不少文章內容詳實,有圖有代碼,筆者就不重複造輪子了。就寫寫本身的一些理解吧。
關鍵詞
Window, UserControls, Dragchrome
參考資料
http://www.cnblogs.com/DebugLZQ/archive/2013/05/07/3062733.htmlshell
這篇文章的介紹很是全面,基本覆蓋了全部拖動方法。值得學習參考。windows
正文
1. 窗口的拖拽api
咱們知道,鼠標放在窗口的標題欄上按下就能夠拖動窗體。咱們要實如今窗口的所有地方或特定地方按下鼠標左鍵實現拖動。學習
【推薦】 使用 DragMove()方法,能夠徹底勝任。ui
使用參考: http://www.cnblogs.com/DebugLZQ/archive/2013/05/07/3062733.htmlspa
---分割線---.net
其它:設計
1. 自定義標題欄,使用WindowChrome
適用於無邊框自定義窗體,又不想去實現雙擊全屏,標題欄右鍵菜單的狀況。簡稱比較懶得狀況。(我的感受使用起來感受可控性不是很好,仍是本身從新設計舒服。ヽ(ー_ー)ノ
2. 利用SendMessage實現窗口拖動
適用於。。。我也不是很清楚,沒咋用過(`・ω・´)。原理就是經過向窗口發送API User32中包含的移動命令來實現移動。學習學習。
使用參考: https://www.cnblogs.com/zhouyinhui/archive/2009/08/28/1555870.html
順便分享一個互操做維基,能夠查到全部Windows API的使用方法,用到的時候查一下很是方便。瞎吉爾百度可能會有錯誤答案的說。。
2.控件的拖拽
【推薦】 使用Blend中的行爲來實現拖動
強大的VS Blend提供了實現拖拽的行爲(behavior),不用本身去計算和完成具體實現,使用起來極爲方便,真正實現「點一下玩一年」,很是適合我這種懶人。
使用參考: https://www.cnblogs.com/YGYH/archive/2010/09/10/1822724.html
問題:這個拖拽行爲雖然使用起來方便,可是隻適用於子控件在父容器中拖拽的狀況。
---分割線---
其它:
1. 經過RenderTransform的TranslateTransform屬性實現
在二維 x-y 座標系統內平移(移動)對象。
RenderTransform屬性能夠實現界面的轉換、旋轉、縮放、傾斜、翻轉等各類功能。因此咱們只須要得到拖拽時改變的值後,就能對各類控件進行位置轉換。
使用參考: https://blog.csdn.net/qq_18995513/article/details/72765269#
2. 【推薦】Thumb控件
表示可由用戶拖動的控件。
依賴於父容器進行使用,能夠經過控件拖動時的屬性值就能獲取控件的垂直變化量和水平變化量。拖動DeltaEventArgs類在使用時,能夠將按鈕、圖片等須要實現拖拽的內容放到Thumb下,經過拖拽Thumb來實現內容物的拖拽。參考學習這篇博文的2.1項
3. Canvas容器中的子控件,經過點擊下時記錄的點,而後計算移動時的點的變化量,來從新計算子控件與父容器的相對位置。 參考學習這篇博文的2.3項
4. Grid容器中的子控件拖拽的實現方法與Canvas大同小異,參考學習這篇博文的2.4項
後文
以上應該就是在WPF中的各類拖拽的實現方法了,有簡單的,也有複雜的。具體使用哪一個,應該仍是要根據使用需求來用。不過經常使用的就那幾個(逃~
原文出處:https://www.cnblogs.com/younShieh/p/10811456.html