扩展wpf的功能

本文关键字:功能 wpf 扩展 | 更新日期: 2023-09-27 18:12:41

我想用Visual Studio创建一个GUI,主要由Treeview和画布组成。应用程序的功能最初是在画布上创建一些复杂的形状,这些形状稍后应该连接起来,以构建一个紧凑的单元(最终目的不是图形化,而是表示函数和过程)。更具体地说,用户将有可能通过在Treeview上的形状选择来单击画布和要绘制的相应形状。他还可以移动画布上的形状,并用线条将它们连接起来。很明显,应用程序应该扩展使用mousellistener (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);

是合理的建立一个单独的类,负责创建矩形?然后我怎么能操纵元素的主窗口和mousEvents内的新类?

扩展wpf的功能

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

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