gpt4 book ai didi

c# - 扩展wpf的功能

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:00 26 4
gpt4 key购买 nike

我想用 Visual Studio 创建一个 GUI,它主要由一个 Treeview 和一个 Canvas 组成。该应用程序的功能最初是在 Canvas 上创建一些复杂的形状,稍后应将这些形状连接起来以构建一个紧凑的单元(最终目的不是图形,而是表示功能和过程)。更具体地,用户将有可能通过在 TreeView 上的形状选择来点击 Canvas 和要绘制的相应形状。他还可以移动 Canvas 上的形状并用线条将它们连接起来。很明显,应用程序应该扩展使用鼠标监听器 (mouseEvents)。

wpf 是完成类似任务的适当类型的项目吗?

鉴于它们的形状不是普通的,但它们包含内容、其他形状、按钮和鼠标事件,因此创建它们所需的代码不受限制。它应该完全在 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 的元素?

最佳答案

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

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

关于c# - 扩展wpf的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7943872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com