2010-05-28 74 views
2

我是Silverlight的新手。剛剛創建了我的第一個顯示deepzoom圖像的應用程序。silverlight中的矢量圖形

尋找一些指針如何在Silverligth中顯示矢量圖形。這些圖形都是二維的,是一系列線條(x1y1,x2y2),點(xy),基本形狀。數據以ASCII文本文件形式提供。

從文件中讀取數據並在SL中繪製的方式是什麼?我需要首先將矢量對象轉換/轉換爲圖像(XAML)嗎?從哪兒開始?

理想的情況是所有的矢量obects應該可以通過編程或用戶操作進行選擇。

感謝, 瓦爾

+0

包含描述合理簡單項目的ASCII文本的一小段代碼。 – AnthonyWJones 2010-05-28 16:01:57

回答

2

沒有直接繪圖API來我knoweldge,但你可以seperately通過添加各種形狀,以可視化樹添加值。

你正在尋找可能會涉及Path類,反過來的代碼,PathFigurePolyLineSegment(或可能LineSegment)。

下面是一些代碼,繪製一個正方形:

PolyLineSegment segment = new PolyLineSegment(); 
segment.Points.Add(new Point(0, 50)); 
segment.Points.Add(new Point(50, 50)); 
segment.Points.Add(new Point(50, 0)); 
segment.Points.Add(new Point(0, 0)); 

PathFigure figure = new PathFigure() 
{ 
    StartPoint = new Point(0, 0) 
}; 
figure.Segments.Add(segment); 

PathGeometry geometry = new PathGeometry() 
{ 
    Figures.Add(pathFigure) 
}; 

Path path = new Path() 
{ 
    Stroke = new SolidColorBrush(Colors.Black), 
    StrokeThickness = 2, 
    Data = pathGeometry 
}; 

// To render, the Path needs to be added to the visual tree 
LayoutRoot.Children.Add(path); 

編輯如果在ASCII文本文件中的數據可以在運行時不能改變,它可能是值得研究編寫轉換的文件到XAML腳本所以可以編譯。

+0

謝謝理查德。 數據在運行時不會被改變,所以我會研究XAML編譯。 週末愉快, Val – val 2010-05-28 19:28:27

0

您首先遇到了實際訪問文件的問題。

獲取文件內容

如果你有地方舉行服務器端,那麼你會用WebClient獲取使用DownloadStringAsync文件這些文件。

在另一方面,如果用戶打開一個本地文件,那麼你需要使用OpenFileDialog類,要求他們打開該文件,然後FileInfo對象使用OpenTextOpenFileDialog提供讀取字符串數據。

解析

好,是你的格式,所以你必須代碼自己。

__Generating UI elements_

你不會將其轉換爲XAML。既然你想讓這些載體項目是單獨選擇的元素,那麼你可能要使用的一組中System.Windows.ShapesElipseLinePathPolygonPolylineRectangle發現Shape類型。

毫無疑問,有問題的格式有一些定義這些元素相對於固定的0,0點的位置。因此,用於顯示這些內容的最佳面板是Canvas

您將通讀每個向量項目,選擇創建一個適當形狀的實例,根據項目中的數據設置其屬性。您需要確定其在Canvas內的正確位置,並使用附加屬性Canvas.LeftCanvas.Top。將形狀添加到CanvasChildren集合中。

+0

明白了。我會在週末嘗試。感謝您的及時回覆。 乾杯, Val – val 2010-05-28 19:30:53