我有一个网格上有一堆'路径',叫做'GraphPanel',我试图弄清楚当你点击网格时鼠标是哪一个然后将'填充'改为GreenYellow,我使用静态变量'_HitBox'值为2(不重要)
System.Windows.Point P = e.GetPosition(GraphPanel);
var PointsToColor = from children in GraphPanel.Children.OfType<Path>()
where children.Data is EllipseGeometry &&
P.X > (((EllipseGeometry)children.Data).Center.X - _HitBoxSize) &&
P.X < (((EllipseGeometry)children.Data).Center.X + _HitBoxSize) &&
P.Y > (((EllipseGeometry)children.Data).Center.Y - _HitBoxSize) &&
P.Y < (((EllipseGeometry)children.Data).Center.Y + _HitBoxSize)
select children;
foreach (var p in PointsToColor)
{
p.Fill = Brushes.GreenYellow;
break;
}
请注意:
1-它会在调试时点击p.Fill = Brushes.GreenYellow
,但它点击的点不会改变颜色。
2-我最初使用IsMouseOver()
这是一种内置于网格每个成员的方法,它非常慢(并且因为网格上有其他项目,如标签和东西之类的点)点击的东西超出了点,它不会返回真实
3-我也试过这个(认为select语句没有返回引用):
Path test = ((Path)GraphPanel.Children[GraphPanel.Children.IndexOf(p)]);
test.Fill = Brushes.GreenYellow;
GraphPanel.Children[GraphPanel.Children.IndexOf(p)] = test;
哪次成功运行,但点的填充颜色再次没有改变。
此外,我已尝试添加GraphPanel.UpdateLayout()
更改后无法执行任何操作
答案 0 :(得分:0)
经过一段时间的研究和决心,并在互联网上搜索关于我的代码实际f $!%错误的任何线索或想法
.Fill
只是愤怒的微软开发者制造的伎俩,他们讨厌自己的生活并希望别人遭受痛苦的永恒
.Stroke
是你编辑填充的方式.....