So I created this class Sprite.cs:
class Sprite : INotifyPropertyChanged
{
double _Speed;
RectangleGeometry _SpriteRectangleGeometry;
Path _SpritePath;
public Sprite()
{
_SpriteRectangleGeometry = new RectangleGeometry();
_SpriteRectangleGeometry.Rect = new Rect(0, 0, 50, 50);
Speed = 50;
_SpritePath = new Path();
Color = Brushes.Black;
_SpritePath.Data = _SpriteRectangleGeometry;
}
public Sprite(double xpos, double ypos, double height, double width, double speed, SolidColorBrush color)
{
_SpriteRectangleGeometry = new RectangleGeometry();
_SpriteRectangleGeometry.Rect = new Rect(xpos, ypos, width, height);
this.Speed = speed;
_SpritePath = new Path();
this.Color = color;
_SpritePath.Data = _SpriteRectangleGeometry;
}
public double XPos
{
get { return _SpriteRectangleGeometry.Rect.X; }
set
{
_SpriteRectangleGeometry.Rect = new Rect(value, YPos, Width, Height);
//Notify the binding that the value has changed.
this.OnPropertyChanged("XPos");
}
}
public double YPos
{
get { return _SpriteRectangleGeometry.Rect.Y; }
set
{
_SpriteRectangleGeometry.Rect = new Rect(XPos, value, Width, Height);
//Notify the binding that the value has changed.
this.OnPropertyChanged("YPos");
}
}
public double Speed
{
get { return _Speed; }
set { _Speed = value; }
}
public double Width
{
get { return _SpriteRectangleGeometry.Rect.Width; }
set { _SpriteRectangleGeometry.Rect = new Rect(XPos, YPos, value, Height); }
}
public double Height
{
get { return _SpriteRectangleGeometry.Rect.Height; }
set { _SpriteRectangleGeometry.Rect = new Rect(XPos, YPos, Width, value); }
}
public SolidColorBrush Color
{
get { return (SolidColorBrush)_SpritePath.Fill; }
set { _SpritePath.Fill = value; }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string strPropertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(strPropertyName));
}
}
What I want to do now is add an instance of Sprite to the Xaml, but when i do i get this error:
The value of type 'Sprite" cannot be added to collection or dictionary of type UIElementCollection
Any advice?
The Sprite should derive from the UIElement
class to be added to UIElementCollection
. Also you could wrap it with ContentControl
and provide a DataTemplate
which would create some UIElement
for your sprite object.
You have to add it to the resources section rather than just inline (and make sure it has a key)
<src:Sprite x:Key="data"/>
You also need to have declared your namespace at the top of the file
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.