powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как нарисовать сетку аля UML редактор с помощью Visual
1 сообщений из 1, страница 1 из 1
Как нарисовать сетку аля UML редактор с помощью Visual
    #36503314
Cooton Joe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. Возникла следующая проблема: нужно нарисовать сеточку средствами 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
1 сообщений из 1, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как нарисовать сетку аля UML редактор с помощью Visual
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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