是否可以将路径转换为形状?

时间:2012-08-27 20:11:56

标签: c# wpf

所以我基本上有一个Stack Panel,我正在使用foreach循环遍历子节点,所有的子节点都是'path'格式,但有些是行,有些是椭圆(或者至少是转换为路径)

我的问题是,我怎么知道哪些是线条,哪些是椭圆? ,我正在使用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;
                }
            }

        }
    }

2 个答案:

答案 0 :(得分:2)

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

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

Path path = (Path)x;
Geometry geometry = path.Data;
if (geometry is EllipseGeometry)
{
    ...
}
else if (geometry is LineGeometry)
{
    ...
}
...

答案 1 :(得分:0)

这可能不是最有效的方式,但这是我想象的

if((Path)x).Data.ToString() == "System.Windows.Media.EllipseGeometry"){}