2011-01-21 2 views
0

Так что я создал этот класс Sprite.cs:Добавление пользовательского класса в XAML в 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)); 
    } 
} 

То, что я хочу сейчас сделать, это добавить экземпляр Sprite в 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"/>

Вы также должны быть объявлены пространства имен в верхней части файла

Смежные вопросы