2011-04-14 22 views
5

क्या कोई कस्टम थीम बनाना संभव है और इसे डिफ़ॉल्ट थीम के रूप में उपयोग किया गया है?कस्टम थीम जो डिफ़ॉल्ट थीम को ओवरराइड करता है WP7

प्रत्येक उदाहरण मैं कहीं भी कह सकता हूं कि आप ThemeResources.xaml और System.Windows.xaml फ़ाइलों की प्रतिलिपि बनाकर और अपने ऐप में मर्ज किए गए शब्दकोशों के रूप में कस्टम थीम बना सकते हैं।

http://windowsphonegeek.com/articles/Creating-WP7-Custom-Theme-ndash-Basic-Theme-Implementation Overriding themes in Windows Phone 7

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources/CustomThemeResources.xaml" /> 
      <ResourceDictionary Source="Resources/CustomThemeStyles.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

तो मैं कुछ और है कि आप ब्रश शामिल करने की ज़रूरत अंदर शैलियों फाइल, इसलिए CustomThemeStyles.xaml में मैं इस राशि पढ़ा है।

http://www.windowsphonegeek.com/articles/Creating-WP7-Custom-Theme---Complex-Theme

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="CustomThemeResources.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

यह काम नहीं करता है ... इसलिए मैं नमूना एप्लिकेशन और यकीन है कि पर्याप्त, हर पृष्ठ कुछ रंग पृष्ठभूमि रंग की तरह बदल गया है, करना चाहती है कि डाउनलोड, यह स्थापित करेगा यह है पर बाहरी सबसे घटक।

<Grid Background="{StaticResource PhoneBackgroundBrush}"> 
... 
</Grid> 

यह स्पष्ट रूप से उन्हें हर जगह सेट किए बिना कस्टम विषयों कि शैली/ब्रश/रंग बदल/सभी डिफ़ॉल्ट की आदि शामिल करने के लिए संभव है?

उत्तर

4

यह एक नई शैली है कि बिना डिफ़ॉल्ट में परिवर्तन स्पष्ट रूप से के माध्यम से इसे सेट करने के लिए WP7 के वर्तमान संस्करण में संभव नहीं है

अंतर्निहित शैलियाँ सिल्वरलाइट 4 की एक विशेषता है (और डब्ल्यूपीएफ): विंडोज फोन 7 सिल्वरलाइट 3+ पर आधारित है (कुछ सिल्वरलाइट 4 फीचर्स जोड़े गए हैं)। चूंकि सिल्वरलाइट 3 में कोई प्रभावशाली शैलियां नहीं हैं, इसका मतलब यह है कि विंडोज फोन 7 में भी उनका उपयोग करने का कोई तरीका नहीं है।

अब आप कर सकते हैं के लिए:

  1. केवल डिफ़ॉल्ट ब्रश/रंग संसाधनों के रूप में पहला लेख है कि आप ने कहा में विस्तार से बताया ओवरराइड। ध्यान दें कि सभी WP7 नियंत्रण उनके रंग बदल देंगे। ध्यान दें कि किसी कारण से डिफ़ॉल्ट पृष्ठभूमि अपरिवर्तित बनी हुई है। यह WP7 के वर्तमान संस्करण के साथ एक ज्ञात मुद्दा है और शायद "आम" अद्यतन में तय किया जाएगा।

  2. यदि आप कोई नया स्टाइल/कंट्रोल टेम्पलेट चाहते हैं तो आपको "x: Key"/{StaticResource ...} दृष्टिकोण का उपयोग करना चाहिए जैसा कि आपने बताया है कि दूसरे आलेख में उल्लिखित है।

अंत में, के रूप में डेरेक Lakin कि पहले उल्लेख किया: उम्मीद है कि इस बग मैंगो अद्यतन में ठीक किया गया हो जाएगी!

+0

मेरे पास एक शैली/थीम है जिसे मैं हर समय लागू करना चाहता हूं, भले ही यह हल्का या गहरा विषय हो। कॉपी की गई 'ThemeResources.xaml' फ़ाइल को कॉपी करने और सबकुछ बदलने के लिए सबसे अच्छा तरीका है, फिर उन चीजों को स्पष्ट रूप से सेट करें जो पृष्ठभूमि की तरह सेट नहीं होते हैं? या क्या ऐसी कई चीजें हैं जो मर्ज किए गए थीम का उपयोग करके निश्चित रूप से सेट नहीं होंगी? –

1

यदि आप संसाधन शब्दकोश बनाते हैं और इसे Reset.xaml जैसे कुछ कहते हैं जिसमें सभी मानक ब्रश संसाधन शामिल हैं। किसी भी संसाधन संसाधन शैलियों/ब्रश को किसी अन्य संसाधन शब्दकोश में रखें (हम इसे अभी कस्टम.एक्सएमएल कहते हैं)।

<Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Resources/Reset.xaml"/> 
       <ResourceDictionary Source="Resources/Custom.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 

सिद्धांत रूप में, यह पर्याप्त होना चाहिए, लेकिन दुर्भाग्य से यह नहीं है: App.xaml में संसाधन इन शब्दकोशों के दोनों जैसा कि यहाँ दिखाया शामिल हैं। किसी कारण (उम्मीद है कि एक बग मैंगो अद्यतन में ठीक किया गया हो जाएगा) के लिए आप भी इस तरह Custom.xaml में Reset.xaml शामिल करने की जरूरत:

<ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Reset.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

बार जब आप इस किया है, कि होना चाहिए यह; आपको कुछ और करने की ज़रूरत नहीं है। ": मुख्य एक्स":

1

विंडोज फोन मैंगो (7.1) के रिलीज के साथ, एक्सएएमएल डिक्शनरी शैलियों को विलय करने की सुविधा अब काम नहीं करती है। वर्तमान में, आपको कोड संसाधन के अंदर संसाधन संसाधन ब्रश रंग प्रविष्टि को बदलना होगा; अधिमानतः App.xaml.cs. में ऐप() के निर्माता में।

उदाहरण:

  (App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush).Color = Color.FromArgb(12, 12, 54, 145); 
      (App.Current.Resources["PhoneForegroundBrush"] as SolidColorBrush).Color = Colors.Green; 
      (App.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush).Color = Colors.Purple; 

WP8 SDK में उम्मीद है कि हम अब इस समाधान करने की आवश्यकता होगी।

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