0

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

每个Scatter2s工作都很好 - 它们每个都包含ScatterViewItems ,而这些 s 又包含一个Ellipse形状,并且这些都按照需要完美地绘制到 Surface 上。

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

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

我检查以确保ScatterViewItem在绘制之前明确设置每个 s 宽度和高度,椭圆宽度和高度也是如此 - 以防万一会导致计算中心属性。

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

谢谢


在节点中:

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();

给出输出:

字符串的实际中心:NaN,NaN
字符串的中心:NaN,NaN

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

它与我在 SurfaceWindow 类中放置它的位置有什么关系吗?目前,一切都在onInitialised(),在调用之后base.OnInitialised

4

1 回答 1

0

在您设置中心或用户移动 SVI 之前,不会设置中心。我只是设置它,因为 SV 只是随机放置它们。如果您真的不希望这样,您将需要使用 TransformToAncestor,如Get Absolute Position of element in the window in wpf以获取 SVI 中心相对于其父 SV 的位置。

于 2011-11-19T17:31:45.603 回答