0

私の問題は次のとおりです。Canvas があり、「Node」というクラスがあります。ノードのコレクションを作成し、ノードごとに、キャンバス上の特定の場所に形状 (楕円、三角形、文字) を作成する必要があります。

Node をクリックしたときに、親 Node オブジェクトに戻って変更できるようにする必要があります。

MouseLeftButtonUp リスナーを追加してから e.OriginalSource に移動しても、元のソースのタイプが Node ではなく Ellipse (またはその他の Shape) であるため、機能しません。

この問題には 2 つの解決策があります。

1) ノード ID など、Ellipse にデータをアタッチする方法があれば、それでよいでしょう (Ellipse.AddLogicalChild や Ellipse.SetCurrentValue のようなものですが、それが機能するかどうか、または適切かどうかはわかりません。これらの方法のいずれかを使用します)。2) または、Node で Shape クラスを派生させて、それを Canvas.Children に直接追加できるようにする必要があります。

これらのいずれかを行うにはどうすればよいですか? または、別の解決策を見つけた場合は、お知らせください。

ありがとう、

アントン・カネフスキー

4

2 に答える 2

1

ノード クラスは、目的の形状をコンテンツとしてホストするユーザー コントロールにすぎない可能性があります。すなわち: コンストラクターで目的の形状を作成し、コンテンツとして設定してから、ノードをグリッドに追加します。

または、シェイプをノード クラスのメンバーにする (またはメンバーにしない) だけで、ノード クラス関数を使用してイベントをサブスクライブすることもできます。つまり、各シェイプは、関連付けられたノード クラスでイベントを発生させます。

于 2011-02-15T16:50:19.720 に答える
1

ディクショナリ コンテナを使用して、すべてのシェイプとノードを参照できます。指定された形状のノードを取得するには、次を使用します

dict.TryGetValue(shape, out Node);
于 2011-02-15T16:39:00.597 に答える