Я создаю простую программу 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, а вместо этого добавлять его в визуальные элементы?
спасибо