关于返回NaN的c#:ScatterViewItem.Center(X和Y)属性

ScatterViewItem.Center (X and Y) properties returning NaN

我有一个基于XAML的ScatterView,我在其中以编程方式添加了更多Scatterviews(以下称为Scatter2s)。

每个Scatter2s都可以正常工作-它们每个都包含ScatterViewItem,它们又包含一个Ellipse形状,并且这些形状都根据需要完美地绘制到了Surface上。

在尝试在两个椭圆之间绘制线时,我尝试获得Scatter2.[AScatterViewItem].Center.X.Y属性,因此我可以设置线的X1Y1,X2Y2属性,但是它们以NaN形式返回。我也尝试过ActualCenter导致相同的结果。

我最初以为是因为我试图在椭圆上绘制屏幕之前访问这些属性,但是我在绘制了椭圆之后又打印了属性值,并得到了相同的结果。

我检查以确保在绘制之前分别明确设置了ScatterViewItem的每个宽度和高度,以及椭圆的宽度和高度,以防万一会丢失对中心属性的计算。

是否有比使用Center属性更好的方法来获取尚未明确定位的ScatterViewItem的位置?

谢谢

在节点中:

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

在我的主班上

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

给出输出:

Actual centre to string: NaN,NaN
Centre to string: NaN,NaN

CenterToString()函数之前调用将Node添加到主ScatterView(context.Items.Add(svi))的代码。

与将其放置在SurfaceWindow类中的位置有关吗?当前,所有内容都在对base.OnInitialised的调用之后的onInitialised()中。


中心未设置,直到您对其进行设置或用户移动了SVI。我会设置它,因为SV只会将它们随机放置。如果您确实不希望这样做,则需要使用TransformToAncestor,如在wpf中获取窗口内元素的绝对位置,以获取SVI相对于其父SV的中心位置。