我一直在使用Children.Add,使用不同的默认silverlight控件将它们添加到画布中。 我没有得到的是为什么这样的事情是可能的:
Rectangle rec = new Rectangle(){...};
canvas.Children.Add(rec);
但不是这样的(甚至不编译):
myRectangle rec = new myRectangle();
canvas.Children.Add(rec);
myRectangle只是一个矩形的包装
我确定我遗漏了一些基本的东西...... 谢谢你的帮助。
myRectangle class:
public class myRectangle
{
private SolidColorBrush fillColor;
private Rectangle recNewColor;
internal myRectangle()
{
fillColor = new SolidColorBrush(Colors.White);
LinearGradientBrush strokeBrush = new LinearGradientBrush()
{
StartPoint = new Point(0.5, 0),
EndPoint = new Point(0.5, 1),
GradientStops =
{
new GradientStop() { Color = Colors.Red, Offset = 1.0 },
new GradientStop() { Color = Colors.Orange, Offset = 0.0 },
}
};
recNewColor = new Rectangle()
{
Stroke = strokeBrush,
Height = 20,
Width = 20,
Fill = fillColor,
HorizontalAlignment = HorizontalAlignment.Left,
VerticalAlignment = VerticalAlignment.Top,
Margin = new Thickness() { Bottom = 5, Left = 5 },
};
}
...
}
答案 0 :(得分:2)
myRectangle rec = new myRectangle();
canvas.Children.Add(rec.myrectmember); <-- add member which is actually a rectangle
答案 1 :(得分:1)
定义“包装器”...它是继承自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());
}
}
编辑:
您需要将可视元素添加到可视树中。简单地让他们成为你班上的成员是行不通的。 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派生,您将获得该功能。然后,您想要在可视化树中呈现的任何内容都可以添加到类的“Children”属性中。
或者您可以实现自己的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);
编辑: 只是尝试编译它并注意到你无法从UIElement派生...尝试FrameworkElement或Control。
答案 2 :(得分:0)
您的myRectangle
类必须从UIElement
(或其子类,即Shape
)继承。您无法直接从Rectangle
继承,因为它已被密封。
答案 3 :(得分:0)
您需要为您的班级扩展UIElement才能成为Canvas的孩子。如果您只想在其中包装一个Rectangle,请扩展ContentControl并为其分配Content属性:
public class MyRectangle : ContentControl
{
private Rectangle recNewColor;
public MyRectangle()
{
///...
this.Content = recNewColor;
}
}