2012-08-27 63 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