Указанный Visual уже является потомком другого Visual или корнем CompositionTarget - PullRequest
6 голосов
/ 04 июня 2010

WPF Visualizer Визуальное дерево холст

canvas.Children.Add poly |> ignore

Указано визуальное значение

  1. уже ребенок другого Visual или
  2. корень CompositionTarget.

Не думаю, что это 1), не уверен, что 2)?

Использование Visual Studio 2010, F # 2.0, WPF, ... не XAML

1 Ответ

12 голосов
/ 04 июня 2010

Немного трудно диагностировать проблему без соответствующего примера кода, но, возможно, проблема в том, что вы пытались добавить один и тот же многоугольник к потомкам холста дважды.

Это код, который я взломал, чтобы воспроизвести вашу ошибку:

type SimpleWindow() as this =
    inherit Window()

    do
        let makepoly size corners =
            let size = 192.0
            let angle = 2.0 * Math.PI / float corners
            let getcoords size angle = new Point(size * cos angle, size * sin angle)

            let poly = new Polygon(Fill = Brushes.Red)
            poly.Points <- new PointCollection([for i in 0..corners-1 -> getcoords size (float i * angle)])
            poly

        let canvas = new Canvas(HorizontalAlignment = HorizontalAlignment.Center,
                                VerticalAlignment = VerticalAlignment.Center)

        let poly = makepoly 192.0 5
        Canvas.SetLeft(poly, canvas.Width / 2.0)
        Canvas.SetTop(poly, canvas.Width / 2.0)

        canvas.Children.Add poly |> ignore //this works
        this.AddChild canvas |> ignore

SimpleWindow().Show()

Если я добавлю еще canvas.Children.Add poly, он вылетает с вашим сообщением об ошибке.

canvas.Children.Add poly |> ignore 
canvas.Children.Add poly |> ignore //this fails, poly already exists on the canvas

Чтобы исправить ошибку, я сначала позвонил canvas.Children.Remove, чтобы удалить конкретного дочернего элемента, который присутствовал, чтобы заменить его другим.

canvas.Children.Add poly |> ignore 
canvas.Children.Remove poly
canvas.Children.Add poly |> ignore //this works, because the previous version is gone

Надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...