2011-10-30 8 views
2

主にツリービューとキャンバスで構成される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の要素を新しいクラスの中で操作できますか?

答えて

0

あなたが書いたことから、WPFは必要なものです。 IMHOあなたは、あなたのダイアグラムアイテムを表すクラス(カスタムコントロール)を作成する必要があります。ダイアグラム上のすべての図形に異なるクラスを書く必要はありません。外観がすべて異なる場合は、常に異なるテンプレートを使用してダイアグラムコントロールの表現を変更することができます。

このようなことを構築する方法は、かなり複雑な質問です。私は、WPFでダイアグラムデザイナを作成する上で非常に有用な記事を見つけました。実際には一連の記事です。彼らは始めるのに良い場所になるでしょう。 Here's the link for the last article(前の記事へのリンクが含まれているため)

関連する問題