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()中。
- 请注意,如果我使用有效的Point对象初始化Center属性,但确实会返回一个值,但是我希望Surface可以将项目本身放置。
中心未设置,直到您对其进行设置或用户移动了SVI。我会设置它,因为SV只会将它们随机放置。如果您确实不希望这样做,则需要使用TransformToAncestor,如在wpf中获取窗口内元素的绝对位置,以获取SVI相对于其父SV的中心位置。
- 谢谢xyzzer,虐待尝试并举报。我想我最终会设置它-但是按原样需要它来进行演示。
-
有没有办法看到类似于Android的Hierarchy Viewer使用的布局的树状视图? Ive添加的元素以编程方式添加,初始ScatterView除外。使用TransformToAncestor表示不是祖先(与后代相同),并且TransformToVisual表示不共享祖先。
-
感谢xyzzer,精湛的工具。它还确认视觉效果是TransformToAncestor提供的根的后代,因此我看不到为什么它不这么说。
-
将其标记为需要做的事情的答案-在我看来,它尚不起作用的原因是因为在我尝试使用TransformToAncestor时仍在组装可视树(goo.gl/OJK2O)