2012-08-27 26 views
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; 
       } 
      } 

     } 
    } 
+0

我假定一个'椭圆'没有任何直线,'线'没有曲线,所以你可以检查'Path.Data'来查看'Path'。如果您滚动到[MSDN的PathSegments页面底部](http://msdn.microsoft.com/en-us/library/system.windows.media.pathsegment.aspx),您可以看到不同的可用段类型。 – Rachel

回答

2

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

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

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

这可能不是最有效的方式,但是这是我已经想通了

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

这最好写成'if(((Path)x).Data is System.Windows.Media.EllipseGeometry')。 – Clemens