5

VisualTreeHelper メソッド FindElementsInHostCoordinates を使用して、指定された X および Y の位置で ListBoxItem を検索しています。ただし、X と Y の値は、関心のある ListBox だけでなく、ページ全体のポイントに関連しているように見えます (その要素をメソッドのサブツリー パラメーターに渡しているにもかかわらず)。以下では、これは ListBox から派生したカスタム コントロールを指します。

foreach (UIElement element in VisualTreeHelper.FindElementsInHostCoordinates(new Point(X, Y), this))
{
    if (element is ListBoxItem)
    {
        int index = this.ItemContainerGenerator.IndexFromContainer(element);
        break;
    }
}

したがって、(0,0) は、ListBox の左上隅ではなく、プラグイン全体の左上隅を基準とします。ページ座標を ListBox 座標に変換するために、ここで自分自身 (コード内) で数学的な作業を行う必要がありますか、それとも、特定の X および Y ポイントが ListBoxItem の上にあるかどうかを判断するヒット テストを実行する他の方法はありますか?

ありがとう。

4

1 に答える 1

9

私はこれを自分で考え出しました(すごい)。コントロールの上と左の値を決定し、コントロールの内部に X と Y の値を追加しました。

GeneralTransform gt = this.TransformToVisual(Application.Current.RootVisual as UIElement);
Point offset = gt.Transform(new Point(0, 0));
double controlTop = offset.Y + Y;
double controlLeft = offset.X + X;

したがって、コントロールに相対的な X 値と Y 値を渡すことができますが、このコードはそれをグローバル座標に変換します。

この質問にはタンブルウィード バッジはありません。:)

于 2010-02-04T16:27:37.700 に答える