所以我基本上有一个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;
}
}
}
}
答案 0 :(得分:2)
您可以检查Path.Data属性的类型,该属性是从Geometry派生的类。
除了一些复杂的几何类型,基本的派生几何类型是EllipseGeometry,LineGeometry和RectangleGeometry。
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"){}