none
Обновить Canvas после изменения геометрии фигуры RRS feed

  • Вопрос

  • Здравствуйте, у меня есть класс:
    namespace Digger.GameClasses
    {
        public abstract class CGameObject : Shape
        {
            #region API
    
            public RectangleGeometry Geometry { get; set; }
    
            #endregion
    
            #region Support
    
            protected CGameObject()
            {
                var size = SystemInformation.PrimaryMonitorSize;
                Width = size.Width;
                Height = size.Height;
            }
    
            #endregion
    
            #region Override
    
            protected override Geometry DefiningGeometry
            {
                get { return Geometry; }
            }
    
            #endregion
        }
    }


    То есть в этой классе можно изменять геометрию какого-либо объекта.
    Предположим у нас есть класс CRoad - наследник CGameObject и этот код внутри Canvas'a:
    CRoad road = new CRoad();
                road.Geometry = new RectangleGeometry(new Rect(0,0,100,100));
                road.Fill = new SolidColorBrush(Colors.Aqua);
                SetLeft(road, 0);
                SetTop(road, 0);

    И так мы получаем квадрат с определенными координатами и размером. Но если мы потом изменим эту геометрию(объект Geometry), то фигура останется прежней. Соответственно вопрос: как можно принудительно перерисовать Canvas или можно ли поступить иначе в данном случае?

Ответы

  • Добрый день.

    Вам нужно добавить вызов road.InvalidateVisual(), либо сделать зависимое св-во:

    public readonly DependencyProperty GeometryProperty = DependencyProperty.Register("Geometry", typeof(RectangleGeometry), typeof(CGameObject), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));
    
    public RectangleGeometry Geometry 
    {
       get
       {
          return (RectangleGeometry)GetValue(GeometryProperty);
       }
       set
       {
          SetValue(GeometryProperty, value);
       }
    }

    • Помечено в качестве ответа Ruzik 21 мая 2013 г. 8:06