主にツリービューとキャンバスで構成されるVisual StudioでGUIを作成したいと思います。アプリケーションの機能は、最初はコンパクトなユニットを構築するために後で接続する必要があるキャンバスに幾分複雑な形状を作成することです(最終的な目的はグラフィカルではありませんが、関数とプロシージャを表しています)。より具体的には、ユーザは、キャンバスおよび描画されるそれぞれの形状をクリックするために、ツリービュー上の形状選択によって可能性を有する。彼はまた、キャンバス上の図形を移動させ、線でそれらを接続する可能性があります。アプリケーションがマウスリスト(mouseEvents)の拡張使用を行うべきであることが明らかになります。wpfの機能を拡張する
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とmousEventの要素を新しいクラスの中で操作できますか?