2012-07-03 60 views
3

我試圖從Silverlight MainWindow.xaml文件中沿着Shapes.Path對象獲取點。我使用Expression Blend來創建路徑。沿着XAML Shapes.Path獲取點數

下面的代碼工作正常,除非我嘗試移動表達式融合中的路徑,這隻會移動邊距。顯然,這並沒有得到計算,我得到的路徑最初創建的點。

 var pathGeometry = path.Data.GetFlattenedPathGeometry(); 
     var currentPoint = new System.Windows.Point(); 
     var tangentPoint = new System.Windows.Point(); 
     var rList = new List<Point>(); 
     var pointsCount = 10; 
     for (int i = 0; i < pointsCount; i++) 
     {     
      double fraction = (double)i/(double)(pointsCount - 1); 

      pathGeometry.GetPointAtFractionLength(fraction, out currentPoint, out tangentPoint); 

      rList.Add(currentPoint); 
     } 
     return rList; 

關於如何獲得保證金變化的任何建議也計算在?

+0

你不能只是增加或減少保證金? – JDB

回答

3

啊......我想我看到了這個問題。 PathGeometry不會從UIElement繼承,這意味着它沒有任何邊距意義。幾何圖形託管在一個控件中,它是實際將幾何圖形繪製到屏幕上的控件。如果要將幾何圖形上的點轉換爲屏幕座標,則需要查找主機控件的位置並計算偏移量。

我的猜測是您的PathGeometry託管在Path控件中。 (混淆,否?)在屏幕座標中獲取位置相對容易。你可以在Path上調用PointToScreen方法,並給它提供計算的點(可能會添加你可能正在應用的任何填充)。相對於窗口獲取點更復雜。你可以在窗口上調用PointToScreen(點0,0),然後從窗口中減去Path的點。或者,您可以將「路徑」放置在「畫布」(Canvas直接位於窗口內部)中,然後獲取Canvas.Top和Canvas.Left。

你不說你的最終目標是什麼,所以很難爲你推薦一個特定的解決方案。

+0

謝謝,你給了我一些有用的想法嘗試。 – zmarks22

+0

好的,所以當將XAML導入到類中時,PointToScreen顯然不起作用,因爲它旨在包含窗口的位置。我需要獲取相對於路徑所在網格位置的點。我想也許我需要找到我的路徑的邊緣,然後嘗試根據網格邊緣與邊緣之間的差異來計算平移。 – zmarks22

+0

@ zmarks22 - 你仍然沒有解釋你的這個項目的最終目標,但我提醒你可能會試圖阻止WPF完成它不是爲了完成任務而設計的。有一些可用於.NET的圖形組件。你考慮過那些嗎?這是我通過codeplex發現的一個:http://graphlib.codeplex.com/ – JDB