2010-02-04 7 views
5

मैं दिए गए एक्स और वाई स्थान पर ListBoxItem खोजने के लिए VisualTreeHelper विधि FindElementsInHostCoordinates का उपयोग कर रहा हूं। हालांकि, एक्स और वाई मान पूरे पृष्ठ में बिंदुओं से संबंधित प्रतीत होता है न केवल उस सूची बॉक्स में जिसमें मुझे रूचि है (भले ही मैं उस तत्व में विधि के उप-पैरामीटर पैरामीटर में गुजर रहा हूं)। नीचे, यह एक कस्टम नियंत्रण को संदर्भित करता है जो ListBox से निकला है।FindElementsInHostCoordinates अंतरिक्ष को नियंत्रित करने के लिए संबंधित नहीं है पृष्ठ

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 के कोने के ऊपरी बाएं कोने के सापेक्ष होगा। क्या मुझे पृष्ठ निर्देशांक को सूची बॉक्स कोऑर्डिनेट्स में बदलने के लिए स्वयं (कोड में) कुछ गणितीय कार्य करने की आवश्यकता है या क्या कोई हिट टेस्ट करने का कोई अन्य तरीका है यह बताने के लिए कि कोई दिया गया एक्स और वाई बिंदु ListBoxItem पर है या नहीं?

धन्यवाद।

उत्तर

9

मैंने इसे स्वयं (वाह) समझ लिया। मैं अपने नियंत्रण के लिए ऊपर और छोड़ दिया मूल्यों निर्धारित और फिर X जोड़ा और वाई मेरे नियंत्रण करने के लिए आंतरिक महत्व देता है:

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; 

तो, मैं एक्स और वाई मूल्यों मेरे नियंत्रण के सापेक्ष में पारित कर सकते हैं, लेकिन इस कोड बदल सकते हैं यह वैश्विक निर्देशांक के लिए।

मेरे लिए काम करता है और हे !, इस सवाल पर कोई टम्बलवेड बैज नहीं है। :)

+0

आप अपने भविष्य के प्रश्नों में अनजान "चांदी की रोशनी" टैग का उपयोग करने पर विचार कर सकते हैं, यह अधिक आंखों को प्राप्त करता है। – AnthonyWJones

+0

टिप के लिए धन्यवाद। विवरण में शैतान के लिए एक और चॉकलेट। :) – beaudetious