2012-08-27 1 views
1

J'ai donc un panneau Stack, et j'utilise une boucle foreach pour parcourir les enfants, et tous les enfants sont des formats 'path', mais certains sont des lignes et certains sont des ellipses (ou étaient au moins, avant convertis au chemin)La conversion d'un chemin vers une forme est-elle possible?

Ma question est, comment puis-je dire lesquels sont des lignes, et lesquels sont des ellipses? , J'utilise l'événement isMouseOver pour vérifier si la souris est sur Ellipses pour les faire changer en conséquence sur 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

Je suppose qu'un 'Ellipses' n'a pas de lignes droites, alors que' Lines' n'ont pas des lignes courbes, de sorte que vous pouvez vérifier le 'Path.Data' pour voir quel genre de lignes existent dans la "Chemin". Si vous faites défiler vers le bas de [la page de MSDN sur PathSegments] (http://msdn.microsoft.com/en-us/library/system.windows.media.pathsegment.aspx) vous pouvez voir les différents types de segments disponibles. – Rachel

Répondre

2

Vous pouvez vérifier le type de la propriété Path.Data, qui est une classe dérivée de Geometry. En plus des types de géométrie complexes, les types de géométrie dérivés de base sont EllipseGeometry, LineGeometry et RectangleGeometry.

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

Cela peut ne pas être le moyen le plus efficace, mais ce que j'ai compris

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

Cela devrait être écrit comme 'if (((Path) x) .Data est System.Windows.Media.EllipseGeometry)'. – Clemens

Questions connexes