2011-05-18 8 views
6

किसी कारण से, बच्चे Expander एस (StackPanel में Expander के अंदर रखा गया है), जब ध्वस्त या विस्तारित किया गया है, तो माता-पिता विस्तारक को Expanded या Collapsed ईवेंट बढ़ाने के लिए कारण बनता है।बाल विस्तारक माता-पिता विस्तारक के विस्तारित और संक्षिप्त घटनाओं को बढ़ा रहे हैं?

कोई भी जानता है कि यह क्यों है या मैं इसे कैसे बदल सकता हूं? मुझे केवल माता-पिता की घटनाओं में दिलचस्पी है।

यहाँ कुछ परीक्षण XAML है:

<Expander Header="Outer" Expanded="Expander_Expanded" Collapsed="Expander_Collapsed"> 
     <StackPanel> 
      <Expander Header="Inner1"> 
       <Canvas Height="100" Width="100" Background="Blue" /> 
      </Expander> 
      <Expander Header="Inner2"> 
       <Canvas Height="100" Width="100" Background="Red" /> 
      </Expander> 
     </StackPanel> 
    </Expander> 

और यहाँ कोड-पीछे है:

private void Expander_Expanded(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("expanded"); 
    } 

    private void Expander_Collapsed(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("collapsed"); 
    } 

जब आप इस चलाने के लिए, यदि आप माता-पिता का विस्तार, आपको एक "विस्तार मिलता है "संदेशबॉक्स, जैसा कि आप उम्मीद करेंगे। लेकिन जब आप बच्चों में से एक का विस्तार करते हैं, तो आपको फिर से संदेशबॉक्स मिलता है।

विस्तारित घटना के लिए documentation का कहना है:

विस्तारित घटना तब होती है जब सच

को असत्य से IsExpanded गुण परिवर्तन लेकिन स्पष्ट रूप से IsExpanded संपत्ति माता पिता Expander पर बदल रहा है नहीं कर रहा है ।

ऐसा क्यों हो रहा है, कोई विचार?

उत्तर

11

उन घटनाओं रूट किया जाता है और पेड़ में बबल सामने, यदि आप घटना से निपटने और इस तरह यह पर प्रतिक्रिया से माता-पिता को रोकने के लिए चाहते हैं, e.Handledtrue के लिए बच्चे विस्तारक के ईवेंट हैंडलर में निर्धारित किया है।

संपादित करें: घटना को उठाए जाने से रोकने के बजाय आप हैंडलर में कोड-निष्पादन को केवल उस मामले तक सीमित कर सकते हैं जब वास्तविक विस्तारक जहां हैंडलर संलग्न होता है, घटना को उठाता है। आप इसे if-सब कुछ में लपेटकर कर सकते हैं जो sender == e.OriginalSource निष्पादित करता है।


(वू, 10k ...)

+0

आह ठीक। मुझे एहसास नहीं हुआ कि इस तरह की घटना को इस तरह से रूट किया जाएगा। जब माउस वास्तव में माता-पिता को भी प्रभावित करता है तो माउस/कीबोर्ड इंटरैक्शन के लिए समझ में आता है ... लेकिन विस्तारित लगता है कि इस तरह से मार्गांतरित होने के लिए एक अजीब विकल्प लगता है। प्रतिक्रिया के लिए धन्यवाद, एचबी। – Tim

+0

दरअसल, मैंने एक बार प्रोग्रामर रूप से विस्तारकों से बने पेड़ का निर्माण किया और बच्चे इसके कारण अपेक्षित विस्तार नहीं करेंगे। –

+0

हाहा। मुझे यकीन है कि निराशाजनक था (जैसा कि यह था)। 10k पर बधाई। मैं वहां अपना रास्ता काम करने की कोशिश कर रहा हूं! – Tim

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