Свойства ScatterViewItem.Center (X и Y), возвращающие NaN - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть ScatterView на основе XAML, к которому я программно добавляю больше Scatterview ( отныне известных как Scatter2s ).

Каждый из Scatter2s работает нормально - каждый из нихсодержат ScatterViewItem s, которые, в свою очередь, содержат форму Ellipse, и все они отлично рисуются на поверхности, как и хотелось.

Пытаясь нарисовать линии между двумя эллипсами, я пытаюсь получить Scatter2.[AScatterViewItem].Center.Xи .Y свойств, поэтому я могу установить свойства линии X1Y1, X2Y2, но они возвращаются как NaN.Я также пытался ActualCenter, что приводит к тому же результату.

Сначала я думал, что это потому, что я пытался получить доступ к этим свойствам до того, как эллипсы были нарисованы на экране, но я напечатал значения свойств после того, как ониВычеркнуты и получили тот же результат.

Я проверил, чтобы каждая из ScatterViewItem s ширины и высоты была явно установлена ​​перед рисованием, как и ширина и высота эллипса - на всякий случай, если бы выбрасывалосьВычисление свойства center off.

Есть ли лучший способ получить позицию 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();

дает вывод:

Фактический центр строки: NaN, NaN
Центр строки: NaN, NaN

Код, который добавляет Node к основному ScatterView (context.Items.Add(svi)), вызывается перед функцией CenterToString().

Может ли это иметь какое-либо отношение к тому, куда я помещаю тего в моем классе SurfaceWindow?В настоящее время все находится в onInitialised(), после звонка на base.OnInitialised.

1 Ответ

0 голосов
/ 19 ноября 2011

Центр не установлен, пока вы не установите его или пользователь не переместит SVI.Я бы просто установил его, так как в противном случае SV просто размещает их случайным образом.Если вы действительно этого не хотите, вам нужно использовать TransformToAncestor, как в Получить абсолютную позицию элемента в окне в wpf , чтобы получить позицию центра SVI относительно его родительского SV.

...