ライン、パス、テキスト ボックスなどの要素がいくつかあるキャンバスがあります。MouseOver
Canvas の場合、次HitTest
のようなすべてのものが存在します。
bool HitTest( Point p )
{
return VisualTreeHelper.HitTest( textBox, p ) != null;
}
これは、ラインとパスではピクセル単位で正確に機能しますが、テキスト ボックスでは期待どおりに機能しません。
たとえば、TextBox が次のように 50, 50 に配置されている場合:
Canvas.SetLeft( textBox, 50.0 );
Canvas.SetTop( textBox, 50.0 );
テキストが高さ約 20 ピクセル、幅 50 ピクセルの場合、画面上の境界矩形はおおよそ L=50 T=50 R=100 B=70 になります。
ただし、HitTest
関数はその長方形では false を返し、長方形 L=0 T=0 R=50 B=20 でのみ true を返します。つまり、ヒット テストはテキスト ボックスのサイズを認識しますが、0,0 に配置されていないことを無視します。
これはなぜ起こり、どのように回避するのですか? (Line 要素と Path 要素を配置するために SetLeft/SetTop を使用しないという事実と関係があると感じています)