扩展wpf的功能

时间:2011-10-30 08:03:02

标签: c# wpf class

我想用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?

1 个答案:

答案 0 :(得分:0)

根据您的编写,WPF正是您所需要的。恕我直言,你应该创建类(自定义控件)来表示你的图表项目。您不必为图中的每个形状编写不同的类。如果外观完全不同,您可以始终使用不同的模板来更改图表控件的表示。

如何构建这样的东西是一个相当复杂的问题。我发现了一篇关于在WPF中创建图表设计器的非常有用的文章。它实际上是一组文章。他们将是一个很好的起点。 Here's the link for the last article(因为它包含以前文章的链接)。