2011-06-09 8 views
9

मैं XAMLक्यों e.Handled = सच काम नहीं कर रहा है?

<StackPanel MouseEnter="StackPanel_MouseEnter" Height="130" Background="Blue"> 
    <Grid MouseEnter="Grid_MouseEnter" Height="60" Background="Red" > 
     <Button MouseEnter="Button_MouseEnter" Height="20"/> 
    </Grid> 
</StackPanel> 

कोड में निम्नलिखित है पीछे मैं इस

private void StackPanel_MouseEnter(object sender, MouseEventArgs e) 
{ 

} 

private void Grid_MouseEnter(object sender, MouseEventArgs e) 
{ 
    e.Handled = true; 
} 

private void Button_MouseEnter(object sender, MouseEventArgs e) 
{ 
    e.Handled = true; 
} 

कर रहा हूँ अब भी मैं Button पर माउस ले जाएँ और e.Handled = true निर्धारित करते हैं, Grid और StackPanel की घटनाओं में क्रमश: कहा जाता है। क्यूं कर? रूटेड घटना को बुलबुले से रोकने के लिए मुझे क्या करना चाहिए?

उत्तर

10

माउसइंटर घटना एक बुलबुला घटना नहीं है, यह एक सीधी घटना है (क्लासिक सीएलआर घटनाओं की तरह)। documentation से:

आप XAML सामग्री में वस्तुओं के लिए कई mouseenter गतिविधि को परिभाषित कर सकते हैं। हालांकि, अगर कोई बच्चा ऑब्जेक्ट और पैरेंट ऑब्जेक्ट दोनों माउसइंटर ईवेंट को परिभाषित करता है, तो मूल ऑब्जेक्ट के माउसइंटर ईवेंट बच्चे ऑब्जेक्ट के माउसइंटर ईवेंट से पहले होता है। यह एक बबलिंग घटना के मामले में नहीं है; यह केवल इंगित करता है कि माउस (या स्टाइलस) ने लेआउट और दृश्य वृक्ष की संरचना के आधार पर दोनों ऑब्जेक्ट्स संभावित रूप से अलग-अलग बार दर्ज किए हैं।

तो आप इसे माता-पिता पर निकालने से नहीं रोक सकते हैं। आप IsMouseDirectlyOver प्रॉपर्टी का उपयोग यह देखने के लिए कर सकते हैं कि माउस वास्तव में केवल दिए गए तत्व पर है या नहीं।

+1

आपके उपयोगकर्ता नाम में प्रस्ताव के संबंध में, मैं गति को दूसरा करता हूं! – Qwertie

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