0

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

4

1 に答える 1

0

永遠の調査と決定、そしてインターネットで実際のf $!%が私のコードで何が間違っているかについての手がかりやアイデアを探した後

.Fill自分の人生を嫌い、他の人に永遠の苦悩を味わってもらいたい、怒っているマイクロソフトの開発者によって作られたトリックです。

.Stroke塗りつぶしを編集する方法です.....

于 2012-10-15T16:32:15.847 に答える