Расширить функционал wpf - PullRequest
       3

Расширить функционал wpf

2 голосов
/ 30 октября 2011

Я хотел бы создать графический интерфейс с Visual Studio, который состоит в основном из дерева и холста. Функциональные возможности приложения изначально заключаются в создании несколько сложных форм на холсте, которые следует соединить позже для создания компактного блока (конечная цель не графическая, а представление функций и процедур). Более конкретно, пользователь мог бы с помощью выбора формы в древовидном представлении щелкнуть по холсту и соответствующей форме для рисования. У него также есть возможность перемещать фигуры на холсте и соединять их линиями. Становится очевидным, что приложение должно использовать расширенные возможности мышиных слушателей (mouseEvents).

Является ли wpf подходящим типом проекта для достижения чего-то подобного?

Учитывая, что эти фигуры не являются простыми, но содержат содержимое, другие фигуры, кнопки и mouseEvents, код, требуемый для их создания, не ограничен. Должно ли оно быть полностью в MainWindow.xaml.cs или было бы лучше направить разделение реализации на большее количество классов (например, один отдельный класс для каждой фигуры)? Например, код для прямоугольника пока:

Double rectWidth = 100;
Double rectHeight = rectWidth;

shapeToRender = new Rectangle() { Fill = Brushes.Red, Height = 100, Width = 100, RadiusX = 7, RadiusY = 7 };
shapeToRender.Stroke = Brushes.Black;
shapeToRender.StrokeThickness = 3;
currentShape = SelectedShape.Empty;

Canvas.SetLeft(shapeToRender, e.GetPosition(canvasDrawingArea).X - rectWidth / 2);
Canvas.SetTop(shapeToRender, e.GetPosition(canvasDrawingArea).Y - rectHeight / 2);

canvasDrawingArea.Children.Add(shapeToRender);

double xCircle1 = e.GetPosition(canvasDrawingArea).X + (rectWidth)/2;
double yCircle1 = e.GetPosition(canvasDrawingArea).Y + (rectHeight)/4;
double xCircle2 = xCircle1;
double yCircle2 = e.GetPosition(canvasDrawingArea).Y - (rectWidth) / 4;
double xCircle3 = e.GetPosition(canvasDrawingArea).X - rectWidth / 2;
double yCircle3 = e.GetPosition(canvasDrawingArea).Y;

Ellipse s1Ellipse = new Ellipse() { Fill = Brushes.Yellow, Height = 10, Width = 10 };
Canvas.SetLeft(s1Ellipse, xCircle1-5);
Canvas.SetTop(s1Ellipse, yCircle1-5);

canvasDrawingArea.Children.Add(s1Ellipse);

Ellipse s2Ellipse = new Ellipse() { Fill = Brushes.Yellow, Height = 10, Width = 10 };
Canvas.SetLeft(s2Ellipse, xCircle2-5);
Canvas.SetTop(s2Ellipse, yCircle2-5);

canvasDrawingArea.Children.Add(s2Ellipse);

Ellipse s3Ellipse = new Ellipse() { Fill = Brushes.Yellow, Height = 10, Width = 10 };
Canvas.SetLeft(s3Ellipse, xCircle3 - 5);
Canvas.SetTop(s3Ellipse, yCircle3 - 5);

canvasDrawingArea.Children.Add(s3Ellipse);

Разумно ли создавать отдельный класс, отвечающий за создание прямоугольников? Как тогда я могу манипулировать элементами MainWindow и mousEvents внутри нового класса?

1 Ответ

0 голосов
/ 30 октября 2011

Из того, что вы написали, WPF - это именно то, что вам нужно. ИМХО, вы должны создать класс (пользовательский элемент управления) для представления элементов вашей диаграммы. Вам не нужно писать разные классы для каждой фигуры на диаграмме. Если внешний вид отличается, вы всегда можете использовать разные шаблоны для изменения представления элемента управления диаграммы.

Как построить такую ​​вещь - довольно сложный вопрос. Я наткнулся на очень полезную статью о создании дизайнера диаграмм в WPF. Это на самом деле набор статей. Они были бы хорошим местом для начала. Вот ссылка на последнюю статью (поскольку она содержит ссылки на предыдущие статьи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...