在WPF中,我有一種曲線編輯器,它由一個畫布頂部的滾動查看器(用於平移),其中顯示關鍵點和曲線段(線性,常量和樣條曲線)。我正在使用MVVM。另外,我可能有數百個按鍵,其間有段。另外,平移/縮放必須非常平滑和響應。WPF縮放問題
在模型(和ViewModel)中,一個鍵有XY位置;細分市場有PointCollection
。 在視圖中,鍵是Rectangle
,曲線段是Polyline
。 所有這些UI元素都綁定到Canvas的Top和Left依賴項屬性。
我遇到的問題是執行縮放時。 我第一次與插入的ScrollViewer和帆布
<ScrollViewer>
<Viewbox>
<Canvas/>
</Viewbox>
</ScrollViewer>
平移工作的罰款之間的視框中的工作,但變焦是不是我想要的右變焦。它做了一個「圖形」縮放,這使得一切更大,矩形和多段線。
我想要的是,當放大時,鍵(矩形)彼此之間更遠,沒有變大,並且段(折線)在兩個鍵之間延伸,沒有看到更大的StrokeThickness
。
我想要的解決方案是在更改縮放時將VM中的所有座標轉換爲VM。
例如: 該模型中的關鍵字的位置爲(2,3)。當縮放值爲2.0時,鍵的ViewModel將顯示(4,6)的位置。對於片段,我將翻譯模型的PointCollection中的所有點,並將它們放入ViewModel的PointCollection中。
該解決方案的問題在於,當我擁有數百個密鑰時,在放大/縮小時性能可能會變慢。由於改變縮放因子將改變ViewModels座標,因此每個UIElements都會移動。
我想過UIElements上的RenderTransform來應用縮放轉換,但它不適用於多義線。我可以對多段線使用ScaleTransform,但這樣可以直觀地展開它們。
描述起來相當複雜,所以請隨時索取更多細節。
關於如何實現這一點的任何想法?