2009-11-27 155 views
2

在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,但這樣可以直觀地展開它們。

描述起來相當複雜,所以請隨時索取更多細節。

關於如何實現這一點的任何想法?

回答

0

我已經做了一些非常類似於你想要的東西。不幸的是,我不認爲你會通過使用ViewBox甚至ScaleTransform來獲得你想要的。

您可能想要考慮創建自己的實現IScrollInfo的Panel,以便您可以自己處理Arrange。

希望這會有所幫助。