Generic.xaml के बारे में क्या खास है?


153

मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरी टीम के अन्य सदस्यों के साथ पुन: उपयोग और साझा करने के लिए मेरी रिसोर्सबर्ड फ़ाइलों को कैसे व्यवस्थित किया जाए।

मैं "Generic.xaml" पर आता रहता हूं, लेकिन यदि मैं Generic.xaml के लिए MSDN देखता हूं या केवल Google खोज करता हूं, तो मुझे केवल ब्लॉग पोस्ट और फ़ोरम प्रश्न ही प्रतीत होते हैं, जो इसका उल्लेख करते हैं - मैं ऐसा नहीं कर सकता वास्तव में आधिकारिक और स्पष्ट कुछ भी मारा।

Generic.xaml और MyRandomlyNamedResourceprise.xaml के बीच क्या अंतर है? यह किसी भी तरह से लगता है, मुझे स्रोत विशेषता के साथ पुस्तकालयों में संग्रहीत रिसोर्सड्रेस को संदर्भित करना होगा। उदाहरण के लिए ,:

<Application.Resources>
    <ResourceDictionary
        Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"
</Application.Resources>

तो Generic.xaml क्या लाभ प्रदान करता है? क्या इसका कोई उद्देश्य है अगर मैं अपने एप्लिकेशन को कई "लुक" देने की कोशिश नहीं कर रहा हूं (यानी, यदि मेरे पास केवल एक विषय है)?


6
यदि आप इसे कस्टम नियंत्रण (उपयोगकर्ता नियंत्रण के विपरीत) के साथ उपयोग कर रहे हैं, तो आपको अपने कोड में जेनेरिक .xaml शब्दकोश में विलय करने की आवश्यकता नहीं है।
अनन्त21

जवाबों:


152

WPF में प्रत्येक नियंत्रण में एक डिफ़ॉल्ट शैली होती है जो अन्य चीजों के साथ, नियंत्रण की डिफ़ॉल्ट प्रदान करती है ControlTemplate। WPF नियंत्रण के रूप में एक ही असेंबली में थीम्स फ़ोल्डर में एक विशेष संसाधन शब्दकोश में डिफ़ॉल्ट शैली की तलाश करता है। डिफ़ॉल्ट शैली के लिए कुंजी Control.DefaultStyleKeyनिर्भरता संपत्ति द्वारा प्रदान की जाती है , जिसका डिफ़ॉल्ट मूल्य नियंत्रण के प्रत्येक उप-वर्ग में ओवरराइड होता है।

संसाधन शब्दकोश का नाम वर्तमान विंडोज विषय पर निर्भर करता है। उदाहरण के लिए विस्टा पर एयरो थीम का उपयोग करके, शब्दकोश को Aero.NormalColor.xaml कहा जाता है, XP पर डिफ़ॉल्ट विषय का उपयोग करते हुए यह Luna.NormalColor.xaml है। यदि शैली थीम डिक्शनरी में नहीं मिली है, तो यह जेनेरिक.एक्सैमल में दिखता है, नियंत्रण के लिए जिसका लुक थीम पर निर्भर नहीं करता है।

यह केवल आपके द्वारा परिभाषित किसी भी कस्टम नियंत्रण पर लागू होता है अर्थात नियंत्रण से प्राप्त कक्षाएं, प्रत्यक्ष या अप्रत्यक्ष रूप से। आप एक मानक नियंत्रण के लिए डिफ़ॉल्ट शैली को बदल सकते हैं, जिससे इसे प्राप्त किया जा सकता है और DefaultStyleKeyProperty.OverrideMetadataस्थिर निर्माणकर्ता में कॉल किया जा सकता है, लेकिन फिर आपको ControlTemplate सहित पूर्ण शैली की आपूर्ति करनी होगी।

ध्यान दें कि आप WPF को ThemeInfo विशेषता का उपयोग करके अपनी डिफ़ॉल्ट शैली के लिए बाहरी असेंबली में देख सकते हैं। बाहरी असेंबली का नाम <YourAssembly होना चाहिए ><ThemeName >.dll उदा। प्रस्तुतीकरण Framework.Aero.dll ।


धन्यवाद, फिल। तो क्या आप कह रहे हैं कि अगर मैं सिर्फ एक सामान्य बटन नियंत्रण के लिए एक नया ControlTemplate प्रदान करना चाहता था (यानी, बटन से व्युत्पन्न मेरी अपनी विशेष कक्षा नहीं लिखता), तो इसे "थीम" का हिस्सा नहीं माना जाएगा?
देवदूत

हां, यदि आप एक मानक नियंत्रण को फिर से टेम्पलेट या री-स्टाइल करना चाहते हैं, तो आप UserControl / Window / Application / जो भी स्तर पर सामान्य संसाधन तत्व का उपयोग करते हैं। आप एक निश्चित प्रकार के सभी नियंत्रणों को बदलने के लिए एक निहित कुंजी ( msdn.microsoft.com/en-us/library/… ) के साथ एक शैली का उपयोग कर सकते हैं ।
फिल देवानी

@Zaheylu अब यह काम कर रहा है (मुझे लगता है कि MS उनके डॉक्स अपडेट कर रहा था)
एलन मैकबी - MSFT

104

एक के लिए generic.xamlफ़ाइल (केस असंवेदी) होने के लिए कुछ खास, दो शर्तें पूरी होनी चाहिए:

  • यह प्रोजेक्ट में थीम्स उप-रूट फ़ोल्डर में होना चाहिए
  • विधानसभा को ThemeInfoAttribute(आमतौर पर AssemblyInfo.cs) के साथ चिह्नित किया जाना चाहिए

फिर यह आपके नियंत्रण पर लागू होने वाली किसी भी डिफ़ॉल्ट शैली के लिए डिफ़ॉल्ट लुकअप स्थान के रूप में कार्य करता है। यह भी ध्यान दें कि एक शैली के लिए डिफ़ॉल्ट होने के लिए उसे अपने TargetType और x दोनों को घोषित करना चाहिए: कुंजी जो नियंत्रण के प्रकार के रूप में है जिसे स्टाइल किया जाना है।

यदि आप अपने एप्लिकेशन में संपूर्ण थीम और थीम स्विचिंग को जोड़ना चाहते हैं, जो कि कुछ कोडिंग के साथ पूरा होता है, तो यह तकनीक केवल डिफ़ॉल्ट संसाधन शब्दकोश को परिभाषित करती है।


3
क्या आप स्पष्ट कर सकते हैं कि "डिफ़ॉल्ट शैलियों" से आपका क्या मतलब है? इसका मतलब यह है कि सभी बटन स्वचालित रूप से एक शैली पर ले जाएंगे जिसका टारगेट टाइप "बटन" है? या क्या मुझे अभी भी x:Keyलेखन के द्वारा संदर्भ देने की आवश्यकता है <Button Style="{StaticResource MyButtonStyle}" />? यदि संसाधनशेष में एक से अधिक शैली हो, तो जिसका लक्ष्य "बटन" हो, तो क्या होगा? धन्यवाद।
devuxer

3
इसके इर्द-गिर्द अपना सिर लाने में मेरी मदद करने के लिए एक और सवाल: Generic.xaml WPF एक CSS फ़ाइल के बराबर है जिसने विभिन्न तत्वों के डिफ़ॉल्ट रूप को परिभाषित किया है, जैसे h1 {color:#00ff00}?
devuxer

3
हां, डिफ़ॉल्ट शैली कुंजी को स्पष्ट रूप से संदर्भित किए बिना लागू होगी, और दो समान शैली यह त्रुटि देगी कि शब्दकोश में दो समान कुंजी हैं। और हाँ, आप इसके बारे में इस तरह सोच सकते हैं, डिफ़ॉल्ट व्यवहार के बारे में।
केनन ईके

3
बस इसे जोड़ना चाहते थे, हालांकि यह सच है कि जेनेरिक.एक्सामल फ़ाइल पर विशेष प्रतिबंध हैं, जेनेरिक.एक्सामल के भीतर शब्दकोश प्रविष्टि एक मर्ज किए गए शब्दकोश हो सकती है, जिसकी प्रविष्टियां कुछ भी संदर्भित कर सकती हैं।
Tormod
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.