我想用Visual Studio创建一个GUI,它主要由Treeview和canvas组成。应用程序的功能最初是在画布上创建稍微复杂的形状,以后应该连接以构造紧凑的单元(最终目的不是图形,而是表示功能和过程)。更具体地,用户可以通过Treeview上的形状选择来点击画布和要绘制的相应形状。他还可以在画布上移动形状并将它们与线条连接起来。很明显应用程序应该扩展使用mouselisteners(mouseEvents)。
wpf是适合类型的项目吗?
鉴于它们的形状不是简单的,但它们包含内容,其他形状,按钮和鼠标事件,因此创建所需的代码不受限制。它应该完全在MainWindow.xaml.cs中,还是更好地指向将实现拆分为更多的类(例如每个形状一个单独的类)?例如,Rectangle的代码到目前为止:
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?
答案 0 :(得分:0)
根据您的编写,WPF正是您所需要的。恕我直言,你应该创建类(自定义控件)来表示你的图表项目。您不必为图中的每个形状编写不同的类。如果外观完全不同,您可以始终使用不同的模板来更改图表控件的表示。
如何构建这样的东西是一个相当复杂的问题。我发现了一篇关于在WPF中创建图表设计器的非常有用的文章。它实际上是一组文章。他们将是一个很好的起点。 Here's the link for the last article(因为它包含以前文章的链接)。