Как добавить WPF FrameworkElements и DrawingVisuals на один холст - PullRequest
0 голосов
/ 13 июля 2020

Я создаю простую программу CAD. Для повышения скорости я использую DrawingVisuals. Чтобы облегчить это, я создал собственный класс Canvas, унаследованный от Canvas. Я переопределяю VisualChildrenCount и GetVisualChild внутри этого класса

    protected List<Visual> visuals = new List<Visual>();
    protected override int VisualChildrenCount
    {
        get { return visuals.Count; }
    }
    protected override Visual GetVisualChild(int index)
    {
        if (index < 0 || index >= visuals.Count)
            throw new ArgumentOutOfRangeException("index");
        return visuals[index];
    }

Я показываю этот холст внутри элемента управления ScrollViewer в моем приложении. Моя проблема в том, что я также хотел бы иметь возможность добавлять на свой холст различные элементы FrameworkElements. Я пробовал сделать что-то подобное в своем коде холста:

TextBox tb = new TextBox();
this.Children.Add(tb);    
tb.Width = 100;
tb.Height = 100;
Canvas.SetLeft(tb, 50);
Canvas.SetTop(tb, 20);

, но на моем холсте ничего не отображается. Если я закомментирую визуальные переопределения, он будет работать нормально и добавить текстовое поле на мой холст. Я что-то упустил? Нужно ли мне переопределить другие методы, чтобы заставить FrameworkElements работать? Не следует ли мне добавлять FrameworkElement в коллекцию Children, а вместо этого добавлять его в визуальные элементы?

спасибо

...