Определить "обертку" ... Она наследуется от Rectangle или какого-либо другого UIElement? Для подписи Canvas.Children.Add требуется нечто, производное от UIElement, потому что это UIElementCollection.
Вам потребуется наследовать от UIElement или UIElement контейнера, такого как Panel, чтобы вы могли добавлять дочерние объекты, такие как Rectangle.
public class MyRectangle : Panel
{
public MyRectangle()
{
this.Children.Add(new System.Windows.Shapes.Rectangle());
}
}
Edit:
Вам необходимо добавить визуальные элементы в визуальное дерево. Просто сделать их членами вашего класса не подойдет. Синтаксическому анализатору xaml необходимо знать, какие элементы необходимо добавить в визуальное дерево.
Используйте класс панели, который является хорошей отправной точкой. Помечает класс атрибутом ContentProperty:
[ContentProperty("Children", true)]
// Summary:
// Specifies which property of a class can be interpreted to be the content
// property when the class is parsed by a XAML processor.
если вы просто наследуете Panel, вы получаете эту функциональность. Затем все, что вы хотите визуализировать в визуальном дереве, вы можете просто добавить в свойство «Дети» вашего класса.
Или вы можете реализовать свой собственный UIElementCollection и пометить свой класс атрибутом
[ContentProperty("Children", true)]
public class MyRectangle : UIElement
{
public MyRectangle()
{
this.Children = new UIElementCollection();
this.Children.Add(new System.Windows.Shapes.Rectangle());
}
public UIElementCollection Children {get; private set;}
}
Еще одно редактирование:
Затем вам также необходимо создать экземпляр вашего прямоугольника и добавить его в визуальное дерево вашего приложения. Так что ваш предыдущий код будет делать:
MyRectangle rec = new MyRectangle();
canvas.Children.Add(rec);
Edit:
Просто попытался скомпилировать это и заметил, что вы не можете получить из UIElement ... Попробуйте FrameworkElement или Control.