C # OxyPlot Текстовое расположение PolygonAnnotation - PullRequest
0 голосов
/ 11 мая 2018

У меня есть два PolygonAnnotation, показанные на PlotModel.Я хочу подключить их через один ArrowAnnotation.Как Startpoint и Endpoint из ArrowAnnotation я хочу иметь определенную точку соответствующей PolygonAnnotation, а не позицию, по которой щелкнули.Поскольку Text каждого PolygonAnnotation уже напечатано в центре через TextHorizontalAlignment и TextVerticalAlignment, я подумал, что использование TextPosition в качестве DataPoint для соответствующего Startpoint или Endpoint было бы хорошей идеей,К сожалению, TextPosition всегда равняется {n. def. n. def.}.

Любые идеи, как получить позицию Text или другого определенного Datapoint в пределах PolygonAnnotation?

1 Ответ

0 голосов
/ 14 мая 2018

Не уверен, что это лучший способ, но вы можете попробовать пройтись по дереву визуалов.

    public void FindPosition(object obj)
    {
        if (obj == null) return;
        var plotView = (PlotView)obj;
        FindTextPosition<PlotView>(plotView).FindName(plotView.Name);
    }
    private IEnumerable<T> FindTextPosition<T>(DependencyObject parent)
        where T : DependencyObject
    {
        for (var i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var child = VisualTreeHelper.GetChild(parent, i);
            if (child is TextBlock text)
            {
                if (text.Text == "Test") // Or any identifier you could specify
                {
                    var position = text.PointToScreen(new Point(0d, 0d));

                }

            }

            foreach (var other in FindTextPosition<T>(child)) yield return other;
        }
    }
...