如何更改网格上某点的颜色

时间:2012-10-15 15:41:49

标签: c# wpf

我有一个网格上有一堆'路径',叫做'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()更改后无法执行任何操作

1 个答案:

答案 0 :(得分:0)

经过一段时间的研究和决心,并在互联网上搜索关于我的代码实际f $!%错误的任何线索或想法

.Fill只是愤怒的微软开发者制造的伎俩,他们讨厌自己的生活并希望别人遭受痛苦的永恒

.Stroke是你编辑填充的方式.....