दूसरे दिन, मैं डब्ल्यूपीएक्सटैंशन लाइब्रेरी की रिलीज़ को जारी करने में कामयाब रहा। लाइब्रेरी का पुराना काम करने वाला नाम बहुत समझदार ShWP नहीं था और मूल रूप से लाइब्रेरी में मानक नियंत्रणों के विस्तार और आवरण होते हैं।
Nuget पैकेज मैनेजर के लिए समर्थन जोड़ा गया। अब आप कमांड के साथ लाइब्रेरी स्थापित कर सकते हैं:
इंस्टॉल-पैकेज WPExtensionsआप लाइब्रेरी, सोर्स कोड और डेमो को
कोडप्लेक्स के साथ डाउनलोड कर सकते हैं
हमेशा की तरह, पुस्तकालय का उपयोग करने के लिए, आपको उपयुक्त नामस्थान घोषणा को जोड़ना होगा:
xmlns: WPExtensions = "clr-namespace: WPExtensions; असेंबली = WPExtensions"
अगला, हम पुस्तकालय के मुख्य घटकों पर विचार करते हैं।
AdvancedApplicationBarइस घटक के बारे में पहले से ही एक
geek पत्रिका पर एक प्रकाशन था
मैं संक्षेप में दोहराऊंगा कि क्या हुआ और इस संस्करण में नया क्या है इसका वर्णन करें।
AdvancedApplicationBar मानक ApplicationBar पर एक आवरण है और कई नई सुविधाएँ जोड़ता है। चूंकि यह एक नियंत्रण के रूप में लागू किया जाता है, इसलिए इसे मुख्य कंटेनर (आमतौर पर एक ग्रिड) के अंदर रखा जाना चाहिए।
<phone:PhoneApplicationPage ...> <Grid x:Name="LayoutRoot" Background="Transparent"> ... <WPExtensions:AdvancedApplicationBar IsVisible="True" IsMenuEnabled="True"> <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/> <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 1"/> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 2"/> </WPExtensions:AdvancedApplicationBar> </Grid> </phone:PhoneApplicationPage>
कृपया ध्यान दें कि MenuItem को अलग टैग में आवंटित करने की आवश्यकता नहीं है।
पैनोरमा / धुरी के लिए समर्थन।अक्सर यह अलग पैनोरमा / धुरी वस्तुओं के लिए आवश्यक होता है कि ApplicationBar में बटन / मेनू का एक अलग सेट प्रदर्शित करें। Msdn में, रिज़ॉल्यूशन में अलग ApplicationBar के निर्माण और एक Actin आइटम बदलते समय ApplicationBar बदलने के साथ एक
समाधान प्रस्तावित है
यहां हम पैनोरमाईटेम / पिवटइटम के अंदर संबंधित बटन को स्थानांतरित कर सकते हैं ताकि यह सुनिश्चित हो सके कि बटन / मेनू केवल इस आइटम (बटन 1 / मेनू आइटम 1) में प्रदर्शित हो।
इस स्थिति में, डिफ़ॉल्ट रूप से शेष मेनू बटन को सभी तत्वों के बाद प्रदर्शित किया जाएगा। यदि यह आवश्यक है कि बटन / मेनू पैनोरमा में तत्वों से पहले प्रदर्शित हो, तो मेनू / बटन को पैनोरमा (बटन 2) में स्थानांतरित करें:
<phone:PhoneApplicationPage .... xmlns:WPExtensions="clr-namespace:WPExtensions;assembly=WPExtensions" ...> <Grid x:Name="LayoutRoot" Background="Transparent"> <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button2.png" Text="Button 2"/> <Grid x:Name="ContentPanel" Margin="12,0,12,0"> <controls:Panorama> <controls:PanoramaItem Header="Item1"> <Grid> ... <WPExtensions:AdvancedApplicationBarIconButton IconUri="/Images/appbar_button1.png" Text="Button 1"/> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 1"/> </Grid> </controls:PanoramaItem> <controls:PanoramaItem Header="Item2"> ... </controls:PanoramaItem> </controls:Panorama> </Grid> <WPExtensions:AdvancedApplicationBar IsVisible="True" IsMenuEnabled="True"> <WPExtensions:AdvancedApplicationBarMenuItem Text="MenuItem 2"/> </WPExtensions:AdvancedApplicationBar> </Grid> </phone:PhoneApplicationPage>
बाइंडिंग सपोर्टजैसा कि पिछली बार बताया गया था, AdvancedApplicationBar गुण, मूल, समर्थन डेटा बाइंडिंग के विपरीत है।
<WPExtensions:AdvancedApplicationBarIconButton Text="{Binding AppBarIconButtonText}" IconUri="{Binding AppBarIconButtonText}" Visibility="{Binding Visibility}" Command="{Binding DeleteCommand}" CommandParameter="42" />
फोकस में एक तत्व के लिए बाइंडिंग को अद्यतन करने के लिए समर्थन।यह नए संस्करण में नवाचारों में से एक है, विशेष रूप से उपयोगी है जब डेटाबाइंडिंग का सक्रिय रूप से उपयोग किया जाता है।
आइए हम इस बिंदु पर अधिक विस्तार से ध्यान दें।
मान लें कि हमारे पास फ़ॉर्म में बाइंडिंग के साथ एक टेक्स्टबॉक्स है।
<TextBox Text="{Binding Text,Mode=TwoWay}" />
और प्रपत्र और मानक पर एक संबंधित बटन है <शेल: ApplicationBarIconButton बटन जो हैंडलर मैसेजबॉक्स में संलग्न संपत्ति के पाठ को प्रदर्शित करता है:
MessageBox.Show(Text);
यदि हम टेक्स्ट को एडिट करते हैं और अभी भी एडिट मोड में हैं (टेक्स्टबॉक्स में फोकस में) तो जब हम ApplicationBarIconButton पर क्लिक करते हैं और जब हम बटन पर क्लिक करते हैं तो हम अलग-अलग परिणाम देखेंगे। ApplicationBarIconButton पर टैप करने पर, हम देखते हैं कि पुराना टेक्स्ट प्रदर्शित है। यह इस तथ्य के कारण है कि पाठ केवल तभी अपडेट किया जाता है जब फोकस खो जाता है और मानक AppBar बटन फोकस का नुकसान नहीं होता है।
AdvancedApplicationBar में बटन पर क्लिक करने पर फ़ोकस का नुकसान जोड़ा गया (फ़ोकस पेज पर स्थानांतरित हो जाता है) और हम देख सकते हैं कि बटन अब अपेक्षा के अनुरूप काम करेंगे और हम एक नया पाठ देखेंगे।
यदि आवश्यक हो, तो आप DisableLostFocus = "True" विशेषता के साथ डिफ़ॉल्ट व्यवहार वापस कर सकते हैं
<WPExtensions:AdvancedApplicationBarIconButton ... DisableLostFocus="True" />
मोड = "डिफ़ॉल्ट" अदृश्य = "सत्य"कुछ अधिक ApplicationBar विशेषताएँ जो डिफ़ॉल्ट मानों से भिन्न होती हैं।
डिफ़ॉल्ट रूप से, मोड का मान, ApplicationBar में अदृश्य गुण मोड = "डिफ़ॉल्ट" IsVouble "" के लिए सेट है
AdvancedApplicationBar में, इन विशेषताओं का मान डिफ़ॉल्ट रूप से तय नहीं किया गया है और निम्नलिखित शर्तों पर निर्भर करता है:
यदि हमारे पास पृष्ठ पर बटन और / या पैनोरमाईटेम / पिवोटेम है, तो विशेषता मान मोड = "डिफ़ॉल्ट" इस्विविवि = "ट्रू" हैं।

यदि हमारे पास केवल मेनू आइटम हैं, तो विशेषता मान समान हैं: मोड = "न्यूनतम" इस अदृश्य = "सत्य"

यदि कोई बटन / मेनू आइटम नहीं हैं, तो विशेषता का मान अदृश्य है = "गलत"

यह AdvancedApplicationBar का अवलोकन समाप्त करता है। इसके बाद टेक्स्टबॉक्स एक्सटेंशन का वर्णन होगा
टेक्स्टबॉक्स एक्सटेंशनअक्सर, हम TextBox की बुनियादी कार्यक्षमता को याद करते हैं। मैं भविष्य में एक्सटेंशन की सूची का विस्तार करने की योजना बना रहा हूं, लेकिन अभी तक मैंने दो सबसे आम समस्याओं के लिए लाइब्रेरी में दो एक्सटेंशन जोड़े हैं।
इन एक्सटेंशनों को एकल तत्व और कंटेनर (पृष्ठ, StackPanel, ग्रिड) के तत्वों पर लागू किया जा सकता है। उदाहरण के लिए, यदि हम किसी पृष्ठ पर सभी टेक्स्ट फ़ील्ड के लिए व्यवहार सेट करना चाहते हैं, तो बस पेज में विशेषता जोड़ें:
<phone:PhoneApplicationPage ... WPExtensions:Extensions.UpdateBindingOnChange="True" WPExtensions:Extensions.SelectAllOnFocus="True">
UpdateBindingOnChangeमान लें कि हमारे पास एक विशिष्ट मॉडल से जुड़ा एक पाठ क्षेत्र है:
<TextBox Text="{Binding Text,Mode=TwoWay}" />
अक्सर, आपको पाठ को बदलते समय मॉडल को अपडेट करने की आवश्यकता होती है, आमतौर पर इसके लिए TextChanged इवेंट में बाइंडिंग
को अद्यतन किया जाता है ।
अब आप इसके बजाय विशेषता का उपयोग कर सकते हैं: एक्सटेंशन। UpdateBindingOnChange = "ट्रू"
<TextBox Text="{Binding Text,Mode=TwoWay}" WPExtensions:Extensions.UpdateBindingOnChange="True" />
SelectAllOnFocusआप अक्सर अनुप्रयोगों को देख सकते हैं, जहां मूल्यों को संपादित करते समय, आपको पहले पुराने मूल्य को मिटाना पड़ता है, उदाहरण के लिए, मूल्य / मात्रा का संपादन, आदि ... उदाहरण के लिए, 10 को 20 के साथ बदलें। यदि आप पाठ क्षेत्र में फोकस के साथ पूरे पाठ क्षेत्र का चयन करते हैं, तो आप उपयोगकर्ता के लिए कठिन प्रक्रिया को सरल कर सकते हैं। उपयोगकर्ता या तो वर्तमान मूल्य को फिर से टैप करके छोड़ सकता है या वांछित मूल्य सेट करने के लिए शुरू करके मूल्यों को बदल सकता है।

ऐसा करने के लिए, GotFocus आमतौर पर इंटरसेप्ट किया जाता है जहां txtBox.SelectAll () विधि कहा जाता है।
अब हम WPExtensions एक्सटेंशन: Extensions.SelectAllOnFocus = "True" का उपयोग करके इस व्यवहार को सेट कर सकते हैं
<TextBox WPExtensions:Extensions.SelectAllOnFocus="True" />
माइक्रोफ़ोनवॉपर माइक्रोफ़ोन समर्थननवीनतम संस्करण 1.3 ने ऑडियो नेमस्पेस (WPExtensions.Audio) में माइक्रोफोन पर एक आवरण जोड़ा
आवरण का उपयोग करना भी काफी सरल है:
var microphoneWrapper=new MicrophoneWrapper();
ध्वनि रिकॉर्डिंग:
microphoneWrapper.Record();
बंद करो:
microphoneWrapper.Stop();
बजाने की ध्वनि:
microphoneWrapper.Play();
रिकॉर्डेड ध्वनि प्राप्त करने के लिए दो तरीके हैं:
एक "कच्चा" या मूल रिकॉर्ड प्राप्त करना:
microphoneWrapper.GetContent();
WAV प्रारूप में एक रिकॉर्ड प्राप्त करना:
microphoneWrapper.GetWavContent();
मुझे आशा है कि पुस्तकालय किसी के लिए उपयोगी है, और अपने आप से मुझे किसी भी प्रतिक्रिया के लिए खुशी होगी।