1

つまり、基本的にスタックパネルがあり、foreachループを使用して子を反復処理しています。すべての子は「パス」形式ですが、一部は線で、一部は省略記号です(または、パスに変換される前は少なくとも) )。

私の質問は、どれが線で、どれが楕円であるかをどうやって見分けることができるかということです。、isMouseOverイベントを使用して、マウスが省略記号の上にあるかどうかを確認し、MouseDownでそれに応じて変更します。

private void GraphPanel_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        foreach (var x in GraphPanel.Children)
        {

                if (((Path)x).IsMouseOver)
                {
                    var converter = new System.Windows.Media.BrushConverter();
                    var brush = (Brush)converter.ConvertFromString("#FFB1D100");
                    ((Path)x).Stroke = brush;
                    ((Path)x).StrokeThickness = 8;
                }
                else
                {

                    ((Path)x).Stroke = Brushes.Black;
                    ((Path)x).StrokeThickness = 4;
                }
            }

        }
    }
4

2 に答える 2

2

Geometryから派生したクラスであるPath.Dataプロパティのタイプを確認できます。

いくつかの複雑なジオメトリタイプに加えて、基本的な派生ジオメトリタイプは、 EllipseGeometryLineGeometry、およびRectangleGeometryです。

Path path = (Path)x;
Geometry geometry = path.Data;
if (geometry is EllipseGeometry)
{
    ...
}
else if (geometry is LineGeometry)
{
    ...
}
...
于 2012-08-27T21:02:00.590 に答える
0

これは最も効率的な方法ではないかもしれませんが、これは私が理解したことです

if((Path)x).Data.ToString() == "System.Windows.Media.EllipseGeometry"){}
于 2012-08-27T20:34:07.893 に答える