Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как нарисовать сетку аля UML редактор с помощью Visual / 1 сообщений из 1, страница 1 из 1
04.03.2010, 17:29
    #36503314
Cooton Joe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как нарисовать сетку аля UML редактор с помощью Visual
Доброго времени суток. Возникла следующая проблема: нужно нарисовать сеточку средствами WPF. Кроме того, нужно чтобы эта сеточка изменяла свой размер в зависимости от размера окошка. Реализовал я это добавлением на форму следующего объекта:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
public class DrawingCanvas:Canvas
{
        private List<Visual> visuals = new List<Visual>();

        protected override int VisualChildrenCount
        {
            get
            {
                return visuals.Count;
            }
        }
        protected override Visual GetVisualChild(int index)
        {
            return visuals[index];
        }
        
        // Вспомогательные методы (добавить/удалить элемент)
        public void AddVisual(Visual visual)
        {
            visuals.Add(visual);
            base.AddVisualChild(visual);
            base.AddLogicalChild(visual);
        }

        public void RemoveVisual(Visual visual)
        {
            visuals.Remove(visual);
            base.RemoveVisualChild(visual);
            base.RemoveLogicalChild(visual);
        }

        // Нарисовать сеточку
        public void DrawGrid()
        {
            int step = 8;
            for (int i = step; i < this.ActualWidth; i += step)
            {
                DrawingVisual vsl = new DrawingVisual();
                DrawLine(vsl, new Point(i,0), new Point(i,this.ActualHeight));

                grid.Add(vsl);
                this.AddVisual(vsl);
            }
            for (int i = step; i < this.ActualHeight; i += step)
            {
                DrawingVisual vsl = new DrawingVisual();
                DrawLine(vsl, new Point(0, i), new Point(this.ActualWidth, i));

                grid.Add(vsl);
                this.AddVisual(vsl);
            }
        }

        // При изменении размера полотна, удаляем все visual'ы из коллекции и перерисовываем сетку 
        protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
        {
            if ((e.Property == Canvas.ActualHeightProperty) || (e.Property == Canvas.ActualWidthProperty))
            {
                foreach (Visual vsl in visuals )
                    this.RemoveVisual(vsl);
                visuals .Clear();
                DrawGrid();
            }
            base.OnPropertyChanged(e);
        }

}

Все работает, НО, очень тормозит. Как оптимизировать чтобы не тормозило?
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как нарисовать сетку аля UML редактор с помощью Visual / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]