2011-01-21 56 views
0
为XAML

所以我创造了这个类Sprite.cs:添加自定义类在WPF

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)); 
    } 
} 

我想现在要做的就是加雪碧的一个实例到XAML,但是当我做我得到这个错误:

The value of type 'Sprite" cannot be added to collection or dictionary of type UIElementCollection

有什么建议吗?

回答

5

雪碧应该从UIElement类派生出来,加入到UIElementCollection。你也可以用ContentControl来包装它,并提供一个DataTemplate这会为你的精灵对象创建一些UIElement

1

你必须将它添加到资源部分,而不仅仅是在线(并确保它有一个键)

<src:Sprite x:Key="data"/>

你也需要在文件

的顶部声明了命名空间