कई WP7 डेवलपर्स के लिए, ApplicationBar कार्यान्वयन अप्रिय रूप से आश्चर्यजनक है।
यह मज़ाकिया रूप से गंदी अफवाहें है कि इस घटक को एमएस में बिल्कुल भी विकसित नहीं किया गया था, लेकिन एक टीम के पास चांदी के रंग के साथ कोई लेना-देना नहीं था, जिसने अनुरोधित इंटरफ़ेस पर घटक लिखा थाचूंकि मुझे कई प्रोजेक्ट्स में ApplicationBar के साथ सक्रिय रूप से काम करना था, इसलिए मैंने AdvancedApplicationBar रैपर लिखा, जो कोड की मात्रा को काफी कम कर सकता है। वास्तव में, सबसे आम समस्याओं को केवल एक्सएएमएल में मार्कअप के साथ हल किया जा सकता है।
तो, ApplicationBar के बारे में मुख्य शिकायतें जो आप अक्सर सुन सकते हैं:
उन लोगों के लिए जिन्होंने एमवीवीएम की अच्छाइयों का स्वाद चखा, एक अप्रिय खोज डेटा बाइंडिंग (DataBinding) के लिए समर्थन की कमी थी, और तदनुसार, ICommand के लिए समर्थन की कमी थी। यह बहुत अच्छा है, उदाहरण के लिए, दृश्य कोड लिखने के बजाय ViewModel से IsEnabled संपत्ति सेट करने के लिए।
दृश्यता का अभाव संपत्ति - कभी-कभी आपको कुछ तत्वों को कुछ शर्तों के आधार पर छिपाना पड़ता है।
एप्लीकेशनबार पैनोरमा और / या पिवट के साथ काम करने के लिए असुविधाजनक है। अक्सर, आपको प्रत्येक टैब पर विभिन्न तत्वों को प्रदर्शित करने की आवश्यकता होती है। विशेष रूप से ApplicationBar को संसाधनों में मदद करें जिन्हें SelectionChanged घटना पर प्रतिस्थापित किया जाता है, लेकिन यह IsEnabled गुणों का समर्थन करने के लिए कोड को बहुत जटिल करता है, आदि।
इसके अलावा, यदि एक ही बटन हमेशा प्रदर्शित होना चाहिए, तो आपको इसे प्रत्येक कार्यान्वयन में डुप्लिकेट करना होगा।
दुर्भाग्य से, आप इन समस्याओं को हल करने के लिए एक्सटेंशन का उपयोग नहीं कर सकते, क्योंकि ApplicationBar का विस्तार नहीं किया जा सकता है, आप केवल कुछ
सुधार के अवसर दे सकते हैं, विरासत में दे सकते हैं। फिर भी, विस्तार के साथ उतनी सुविधाजनक सुविधाएँ नहीं हैं।
इसके अलावा, इस तथ्य के बावजूद कि ApplicationBar IApplicationBar इंटरफ़ेस को लागू करता है, जो एक पृष्ठ गुण है, आप इसे वैकल्पिक कार्यान्वयन के साथ प्रतिस्थापित नहीं कर सकते, क्योंकि केवल ApplicationBar कार्यान्वयन स्वीकार किया जाता है।
AdvancedApplicationBar विकसित करते समय
, मैंने पृष्ठभूमि कोड लिखने के बिना, XAML में सिर्फ मार्कअप के साथ आम समस्याओं का समाधान प्रदान करने की कोशिश की।
कनेक्ट कैसे करेंउपयोग करने के लिए, आपको sh.dll के लिए एक लिंक जोड़ना होगा और xmlns जोड़ना होगा: Sh = "clr-namespace: Sh; विधानसभा = Sh" पृष्ठ पर;
चूंकि AdvancedApplicationBar मुख्य ApplicationBar पर एक आवरण की तरह काम करता है, इसे मुख्य पैनल (आमतौर पर ग्रिड) के अंदर रखा जाना चाहिए
<phone:PhoneApplicationPage ...> <Grid x:Name="LayoutRoot" Background="Transparent"> ... <Sh:AdvancedApplicationBar> ... </Sh:AdvancedApplicationBar> </Grid> </phone:PhoneApplicationPage>
मुख्य विशेषताएं:डेटाबाइंडिंग, ICommand समर्थन का समर्थन करें
<Sh: एडवांस्डएपिसिएशनबर्कनबटन
पाठ = "{बाध्यकारी AppBarIconButtonText}"
IconUri = "{बाध्यकारी AppBarIconButtonText}"
दृश्यता = "{बाइंडिंग विजिबिलिटी}"
कमांड = "{बाइंडिंग डिलीट}"
CommandParameter = "42"
/>
पैनोरमा / धुरी समर्थन:चूंकि लगभग हर एप्लिकेशन में प्रत्येक पैनोरमा टैब और कभी-कभी Pivot के लिए ApplicationBar में अलग-अलग बटन निर्दिष्ट करने की क्षमता का एहसास करना आवश्यक था, इसलिए मैंने AppButton और MenuItem को केवल ApplicationBar के अंदर जोड़ने की आवश्यकता को छोड़ने का फैसला किया।
उदाहरण के लिए, यदि हमें पृष्ठ पर पहली जगह में बटन जोड़ने की आवश्यकता है और अंत में सेटिंग्स बटन है और उनके बीच में हमारे पास विशिष्ट पैनोरमा टैब के लिए विशिष्ट तत्व होने चाहिए, तो हम प्रत्येक पैनोरमा में पैनोरमा के पहले ऐड बटन को रख सकते हैं। हम AdvancedApplicationBarIconButton और AdvancedApplicationBarMenuItem की आवश्यकता कर सकते हैं:
और अंत में हम सेटिंग बटन रख सकते हैं।
रेखाचित्र के रूप में:
<Grid x:Name="ContentPanel" Margin="12,0,12,0"> <Sh:AdvancedApplicationBarIconButton ... /> <controls:Panorama> <controls:PanoramaItem> <Grid> ... <Sh:AdvancedApplicationBarIconButton .../> <Sh:AdvancedApplicationBarIconButton ... /> <Sh:AdvancedApplicationBarMenuItem ... /> </Grid> </controls:PanoramaItem> <controls:PanoramaItem> <Grid> <Sh:AdvancedApplicationBarIconButton ... /> </Grid> </controls:PanoramaItem> </controls:Panorama> <Sh:AdvancedApplicationBar> <Sh:AdvancedApplicationBarIconButton ... /> </Sh:AdvancedApplicationBar> </Grid>
अतिरिक्त कोड के बिना AdvancedApplicationBar के साथ काम करने की संभावना का एक छोटा चित्रण, अकेले XAML टूल का उपयोग करके (और डेटाबाइंडिंग के माध्यम से AppBar के साथ बातचीत):
यहां डेमो के साथ लाइब्रेरी और सोर्स कोड डाउनलोड
करेंakhmed.ru के माध्यम से