2011-11-19 70 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工具。 –