2011-11-19 69 views
0

我有一個基於XAML的ScatterView我正在編程地添加更多Scatterviews(從此以後稱爲Scatter2s)。ScatterViewItem.Center(X和Y)屬性返回NaN

每個Scatter2s都可以正常工作 - 它們每個都包含ScatterViewItem s,而其中包含Ellipse形狀,並且這些都是按照需要完美地繪製到Surface上的。

在試圖在兩個橢圓之間畫線時,我試圖獲得Scatter2.[AScatterViewItem].Center.X.Y屬性,所以我可以設置線的X1Y1,X2Y2屬性,但它們返回爲NaN。我也試過ActualCenter,結果相同。

我最初認爲這是因爲我試圖在橢圓在屏幕上繪製之前訪問這些屬性,但是在繪製和相同結果後我打印了屬性值。

我檢查過,以確保每個ScatterViewItem的寬度和高度都是在繪製之前明確設置的,橢圓的寬度和高度也是如此 - 以防萬一會拋出中心屬性的計算。

有沒有更好的方式來獲得一個ScatterViewItem的位置,這個位置還沒有被明確定位,而不是使用Center屬性?

感謝


在節點:

public void CenterToString() 
{ 
    Console.Out.WriteLine("Actual centre: " + svi.ActualCenter.toString()); 
    Console.Out.WriteLine("Centre: " + svi.Center.toString()); 
} 

在我的主類

Node node_one = ((GeneNetwork) context).getNode(localNodeIds[0]); 
node_one.CenterToString(); 

給輸出:

實際CE ntre到字符串:NaN時,爲NaN
中心到字符串:NaN時,爲NaN

增加了一個Node到主ScatterViewcontext.Items.Add(svi))代碼的CenterToString()功能之前被調用。

難道它與我將它放在我的SurfaceWindow類中的位置有關嗎?目前,在致電base.OnInitialised之後,所有內容均在onInitialised()之間。

+0

請注意,如果我使用有效的Point對象初始化Center屬性,但它確實會返回值,但我希望Surface放置項目本身。 – ataulm

回答

0

在設置中心或用戶移動SVI之前,中心沒有設置。我只是設置它,因爲SV只是隨機地放置它們。如果你真的不希望你需要使用TransformToAncestor(如Get Absolute Position of element within the window in wpf)來獲取SVI中心相對於其父SV的位置。

+0

謝謝xyzzer,我會嘗試並報告回來。我想我最終會設置它 - 但需要它作爲演示。 – ataulm

+0

有沒有辦法看到類似於Android的Hierarchy Viewer的佈局的樹視圖?我添加的元素是以編程方式添加的,除了最初的ScatterView。使用TransformToAncestor表示不是祖先(與後代相同),TransformToVisual表示不共享祖先。 – ataulm

+1

尋找Snoop工具。 –