2015-09-09 4 views
19

विजुअल स्टूडियो (2015) एक्सएएमएल संपादक स्वत: पूर्ण कॉम्बोबॉक्स सदस्य सूची में प्रदान करता है, एक घटना Selected नामित है। इस ऑटो-पूर्ण गलत के लिए स्पष्टीकरण क्या है? auto complete डब्ल्यूपीएफ कॉम्बोबॉक्स। चयनित संलग्न घटना। मौजूद है या नहीं?

Selected अपनी नहीं WPF ComboBox घटना (event list), लेकिन ComboBoxItem की अपनी एक घटना (ListBoxItem.Selected से विरासत में मिली)।

यह क्यों है?

संपादित

@ glenThomas'answer (धन्यवाद) के रूप में

, चयनित इसकी संलग्न घटना Selector से inhrited, आसान सभी बच्चे चयनित घटना के लिए सुनने के लिए।

लेकिन, अपने काम नहीं ... अगर मैं Selected में एक हैंडलर रख दिया और मैं इस परियोजना का निर्माण मैं एक त्रुटि प्राप्त: System.Windows.Controls.Primitives.Selector है, जो एक Selected जुड़ी घटना है से

'ComboBox' does not contain a definition for 'Selected' and no extension method 'Selected' accepting a first argument of type 'ComboBox' could be found

उत्तर

7

System.Windows.Controls.ComboBox इनहेरिट करती है।

एक संलग्न घटना आपको किसी विशेष घटना के लिए कुछ विशेष तत्व के लिए एक हैंडलर को अटैचमेंट करने की अनुमति देती है, जो कि वास्तव में घटना को परिभाषित करने वाले माता-पिता की बजाय किसी भी वस्तु के लिए एक हैंडलर संलग्न करने की अनुमति देती है, भले ही ऑब्जेक्ट संभावित रूप से ईवेंट को उठाता है और न ही गंतव्य हैंडलिंग इंस्टेंस परिभाषित करता है या अन्यथा " स्वयं "उस घटना को उनके नामस्थान में।

System.Windows.Controls.Primitives.Selector में SelectedEvent फ़ील्ड है, जो Selected संलग्न ईवेंट का समर्थन करता है।

Selected ईवेंट का कारण यह है कि आप एक ईवेंट हैंडलर को उस नियंत्रण में जोड़ सकते हैं जिसे कई बाल नियंत्रण ईवेंट को उठाते समय निष्पादित किया जाएगा। यह ComboBoxItem के प्रत्येक ईवेंट ईवेंट हैंडलर को जोड़ने से कहीं अधिक सुविधाजनक है।

क्यों यह XAML कोड संपादक के इंटेलिजेंस में शामिल है; मुझे विश्वास है कि एक बग है। Selector वर्ग चयनित घटना के लिए एक सार्वजनिक क्षेत्र है:

public static readonly RoutedEvent SelectedEvent = EventManager.RegisterRoutedEvent( 
      "Selected", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Selector)); 

लेकिन तुम क्योंकि Selector वर्ग इस तरह घटना को परिभाषित नहीं करता घटना के लिए कोई हैंडलर नहीं जोड़ सकते हैं:

public event RoutedEventHandler Selected 
{ 
    add 
    { 
     AddHandler(SelectedEvent, value); 
    } 
    remove 
    { 
     RemoveHandler(SelectedEvent, value); 
    } 
} 

तो ComboBox के लिए इंटेलिजेंस में इसे शामिल करने के लिए यह समझ में नहीं आता है।

लेकिन, ListBoxItem है, जो आप संचालकों संलग्न करने के लिए ComboBoxItem के लिए आधार वर्ग घटना को परिभाषित करता है, इसलिए आप ComboBoxItems

+0

धन्यवाद। लेकिन जैसा कि आप कहते हैं, इस घटना का केवल ListBoxItem और उसके उत्तराधिकारी में महत्व है। यदि ऐसा है, तो इसे ** संलग्न ** ईवेंट के रूप में परिभाषित करने के लिए, यह मानक घटना का सामान्य व्यवहार है। – dovid

+0

मुझे समझ में नहीं आता –

1

SelectedSelector वर्ग में परिभाषित घटना से जुड़ा हुआ है और करने के लिए माना जाता है करने के लिए संचालकों संलग्न कर सकते हैं चयनकर्ता वस्तुओं के साथ प्रयोग किया जाना चाहिए।आम तौर पर आप लिखते हैं:

<ListBoxItem Selector.Selected="OnSelected" /> 

के रूप में नीचे दिखाया गया है, ComboBox भी एक आइटम हो सकता है, यही कारण है कि वहाँ IntelliSense में सूचीबद्ध Selected घटना है:

<ListBox x:Name="Selector"> 
    <ComboBox x:Name="Item1" /> 
    <ComboBox x:Name="Item2" /> 
</ListBox> 

हालांकि, बता गया एक और के एक आइटम होना चाहिए आदेश चयनित घटना का उपयोग करने के चयनकर्ता:

<ComboBox x:Name="Selector1" Selector.Selected="ThisDoesNotWork"/> 
<ListBox x:Name="Selector2"> 
    <ComboBox x:Name="Item1" Selector.Selected="ThisShouldWorkButDoesnt"/> 
    <!-- See edit --> 
    <ComboBox x:Name="Item2" /> 
</ListBox> 

और कारण, आप क्यों न Selector.Selected = लिखने की ".." लेकिन सिर्फ = "..." चयनित? क्योंकि Combobox भी चयनकर्ता है। इसी तरह, आप न, Grid.Column लेकिन सिर्फ कॉलम लिखने के लिए जब ग्रिड के लिए संलग्न है:

<Grid> 
    <!-- Grid.Column="1" --> 
    <Grid Column="1" /> 
</Grid> 

कम से कम, इस दृश्य स्टूडियो में स्वत: पूर्ण के इस व्यवहार की व्याख्या।

संपादित करें: न तो चयनकर्ता। चयनित और न ही चयनित = ".." चयनकर्ता से विरासत में नियंत्रण में संकलन संकलित नहीं होता है, संभवतः एक्सएएमएल पार्सर में बग के कारण। लेकिन नामित एक्सएमएल नेमस्पेस का उपयोग करके वर्कअराउंड है:

<ListBox x:Name="Selector2" 
     xmlns:p="clr-namespace:System.Windows.Controls.Primitives;assembly=PresentationFramework"> 
    <ComboBox x:Name="Item1" p:Selector.Selected="Item1_Selected"/> 
+0

क्या आपने जो लिखा है उसे आजमाया? मेरे लिए एक त्रुटि है जब कॉम्बो एक सूची वस्तु भी होती है। – dovid

+0

वैसे मैंने ListBoxItem की तुलना में अन्य नियंत्रणों के साथ इसे आजमाया है, लेकिन कॉम्बोबॉक्स के साथ नहीं। यह पार्सर में एक बग की तरह लगता है। मेरा संपादन देखें – Liero

+0

@Lireo आपका संपादन सही है। लेकिन घटना का कोई प्रभाव नहीं पड़ता है, और यह कभी भी टाइगर नहीं करेगा, सिवाय इसके कि जब यह ListBoxItem में है। खैर, यह _attached_ घटना क्यों? – dovid

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