2013-03-06 30 views
1

我在這裏遇到了一個相當大的問題。我在我的繪圖應用程序(Caliburn.Micro)中使用MVVM,並且找不到合理的方式使其通過實時預覽繪製圖形。更新WPF中形狀值的最佳方法

繪圖畫布由一個畫布組成,該畫布獲取輸入並將數據提供給模型以及一個Grid,其中包含許多畫布,每個畫布用於一個圖層。該模型觸發事件(我將使用線爲例):

  1. 事件用於創建線的 - 它創建具有用於開始點,結束點,顏色,厚度和自動生成的ID屬性的簡單線對象。該事件具有添加的行和層。
  2. 在鼠標移動過程中,更新了在1中創建的線對象的終點,並以更新後的形狀及其圖層作爲參數觸發新事件。
  3. 在鼠標上移動2.也發生。

現在,在註冊這些事件的ViewModel中,我只需添加一個等效的WPF形狀(在本例中爲System.Windows.Shapes.Line),並在添加形狀時設置參數。但是當鼠標移動以顯示繪製形狀的實時預覽時,我不能提供任何可以更新形狀參數的方法。

我嘗試使用依賴項屬性,但它沒有工作,似乎是一個矯枉過正(因爲將在所有這些畫布中的形狀數量)。我也嘗試延長線路,但這是不可能的,因爲班級是封閉的。我還需要與繪製的圖形進行交互(例如調整大小,旋轉)。

回答

1

我會研究writeablebitmap和WriteableBitmapEx擴展。這將有非常好的表現,取決於你需要渲染多少東西。如果您需要一次在屏幕上顯示1000個東西,您可能需要考慮使用DirectX和SlimDx或SharpDx等包裝。

+0

這個庫看起來非常好。我持續移動/旋轉/調整形狀是我需要在Java2D中實現的東西? – 2013-03-06 15:42:58

+0

有一個分支已經調整大小和旋轉方法。我從來沒有使用過它們,但值得一看。 – mdm20 2013-03-06 15:53:37

+0

經過一番測試,我可以說:與純WPF相比,它非常瘋狂,而且非常簡單。我發現了整個圖片的旋轉和調整大小,但從數字角度實現它並不是一個大問題。非常感謝這個圖書館的提示,它幫助了很多! – 2013-03-06 18:51:51

0

所以你基本上需要兩條線,看起來像以前一樣,看起來像用戶「提交」他的變化時會是什麼樣的一條線?你可以有一個容器類來保存兩個相同的形狀類型,並在用戶處於編輯模式時移動第二個。當用戶退出編輯模式時,您可以保留第一個(用戶取消)或使第二個爲新的,唯一的第一個形狀。

+0

我只需要一條線,其起點將在鼠標下方設置,終點將隨着光標移動,直到我釋放按鈕。所以我需要一個很好的方法來更新從我的模型類中保存GUI的終點的屬性。 – 2013-03-06 15:24:46

相關問題