1

所以我基本上有一个堆栈面板,我正在使用一个 foreach 循环来遍历孩子,所有孩子都是“路径”格式,但有些是线条,有些是椭圆(或者至少在转换为路径之前) )

我的问题是,我怎么知道哪些是直线,哪些是椭圆?,我正在使用 isMouseOver 事件来检查鼠标是否在 Ellipses 上,以使它们在 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

您可以检查Path.Data属性的类型,该属性是派生自Geometry的类。

除了一些复杂的几何类型之外,基本的派生几何类型是EllipseGeometryLineGeometryRectangleGeometry

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 回答