2010-02-04 20 views
5

Tôi đang sử dụng phương thức VisualTreeHelper FindElementsInHostCoordinates để tìm một ListBoxItem tại vị trí X và Y đã cho. Tuy nhiên, giá trị X và Y xuất hiện liên quan đến các điểm trong toàn bộ trang không chỉ là ListBox mà tôi quan tâm (mặc dù tôi đang chuyển phần tử đó vào tham số subtree của phương thức). Dưới đây, điều này đề cập đến một điều khiển tùy chỉnh xuất phát từ ListBox.FindElementsInHostCoordinates Relative To Control Space Không Toàn bộ Trang

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

Vì vậy, (0,0) sẽ liên quan đến góc trên cùng bên trái của toàn bộ trình cắm chứ không phải góc trên cùng bên trái của ListBox. Tôi có cần phải làm một số công việc toán học ở đây bản thân mình (trong mã) để chuyển đổi các tọa độ trang cho các tọa độ ListBox hay là có một số cách khác để làm một thử nghiệm hit để cho biết nếu một điểm X và Y được trên một ListBoxItem?

Cảm ơn.

Trả lời

9

Tôi đã tự tìm ra điều này (wow). Tôi xác định các giá trị đầu và để lại cho kiểm soát của tôi và sau đó thêm vào X và Y giá trị nội bộ để kiểm soát của tôi:

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; 

Vì vậy, tôi có thể vượt qua trong X và giá trị Y so với kiểm soát của tôi, nhưng mã này sẽ làm thay đổi nó đến tọa độ toàn cầu.

Làm việc cho tôi và hey !, không có huy hiệu tumbleweed về câu hỏi này. :)

+0

Bạn có thể xem xét sử dụng thẻ "bạc" chưa được trang trí trong các câu hỏi trong tương lai của mình, thẻ sẽ có nhiều nhãn cầu hơn. – AnthonyWJones

+0

Cảm ơn lời khuyên. Phấn lên một cái khác về ma quỷ trong các chi tiết. :) – beaudetious

Các vấn đề liên quan