Указанный Визуальный уже ребенок другого Визуального или корень CompositionTarget

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

холст. Дети. Добавьте, что poly |> игнорируют

Указанный Визуальный

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

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

Используя Visual Studio 2010, F# 2.0, WPF... не XAML

6
задан sll 31 January 2012 в 13:22
поделиться

1 ответ

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

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

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

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

12
ответ дан 9 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: