「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()
また、変更後も何もしなかったので追加してみました