2010-03-29 12 views
6

मेरे पास एक एडॉर्नर है जो सीमा को सजाने वाला है (कृपया नीचे स्क्रीनशॉट देखें)। एडॉर्नर के लिए माउसडाउन इवेंट हालांकि एडॉर्नर में किसी तत्व पर क्लिक करते समय केवल उठाया जाता है। सजाने वाले तत्व के ऊपर सजावट में किसी भी स्थान पर क्लिक करते समय मुझे उठाए जाने के लिए माउसडाउन इवेंट की आवश्यकता होती है। यह कैसे किया जा सकता है? क्या मुझे सजावट में पारदर्शी नियंत्रण जोड़ना है या इसके लिए कोई और तरीका है? किसी भी मदद के लिए धन्यवाद!डब्ल्यूपीएफ: एडॉर्नर हिट टेस्टिंग/माउसडाउन इवेंट

स्क्रीनशॉट और 2008 वी.एस. परियोजना: adorner के लिए http://cid-0432ee4cfe9c26a0.skydrive.live.com/browse.aspx/%C3%96ffentlich?uc=2

कोड:

class myAdorner : Adorner 
{ 
    public myAdorner(UIElement element) 
     : base(element) 
    { 
     this.MouseDown += new System.Windows.Input.MouseButtonEventHandler(myAdorner_MouseDown); 
    } 


    void myAdorner_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     MessageBox.Show("ok"); 
    } 


    // Draws two rectangles: one in the upper-left and another one in the lower-right corner 
    protected override void OnRender(System.Windows.Media.DrawingContext drawingContext) 
    { 
     Size size = this.AdornedElement.RenderSize; 

     Rect r1 = new Rect(0.5, 0.5, 20, 20); 
     Rect r4 = new Rect(size.Width - 20.5, size.Height - 20.5, 20, 20); 


     SolidColorBrush brush = new SolidColorBrush(Colors.AliceBlue); 
     Pen pen = new Pen(Brushes.Black, 1); 

     drawingContext.DrawRectangle(brush, pen, r1); 
     drawingContext.DrawRectangle(brush, pen, r4); 
    } 
} 

उत्तर

3

जब मैं अतीत में इस किया है, मैं हमेशा एक पारदर्शी कंटेनर का उपयोग किया है। एक शून्य ब्रश होने के लिए पर्याप्त नहीं है; आपको वास्तव में रंग # 00000000 (या कुछ अन्य अल्फा 0 रंग) का उपयोग करने की आवश्यकता है। आप कंटेनर के अंदर तत्वों के लिए IsHitTestVisible बंद कर सकते हैं ताकि कंटेनर सभी माउस डाउन इवेंट प्राप्त कर सके।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन आप एक सजावट पर ब्रश कैसे सेट करते हैं? drawingcontext और पूरे rendersize भरें? –

+0

ठीक है, इसे मिला (केवल एक पारदर्शी आयत खींचने के लिए Drawcontext का उपयोग करें, कुछ खास नहीं) और यह ठीक काम करता है! आपका बहुत बहुत धन्यवाद! अभी भी सोच रहा है कि क्या आपको इसके लिए एक अतिरिक्त आयत की ज़रूरत है। वैसे भी, यह अभी काम करता है। –

1

तो समस्या यह है कि आपका सजावट केवल माउस घटनाओं को बढ़ा सकता है जहां आपके सजावट में दिखाई देने वाले तत्व हैं ... कोने में दो वर्ग।

यदि आप पूरे तत्व में माउसवेंट्स को सुनना चाहते हैं तो आप एडॉर्नेड एलीमेंट पंजीकृत कर सकते हैं। प्रेमीमाउसडाउन यह आपके एडॉर्नर को अपना काम करने का मौका देगा, इससे पहले कि माउसडाउन इवेंट को सजाए गए तत्व से निकाल दिया जाए।

+0

हैलो माइक, मैंने कोशिश की और मेरे लिए यह काम नहीं कर रहा है? –

संबंधित मुद्दे