2016-01-01 9 views
6

में थीम बदलना मैं this.RequestedTheme = ElementTheme.Dark; का उपयोग करके थीम को बदलने में सक्षम था, लेकिन मुझे जो चाहिए वह पूरे एप्लिकेशन स्तर है, क्योंकि यह केवल वर्तमान पृष्ठ की थीम को अंधेरे में बदल देता है।विंडोज 10 यूडब्लूपी ऐप प्रोग्रामेटिक रूप से

जब भी मैं इस App.Current.RequestedTheme = ApplicationTheme.Dark; कोशिश मैं हमेशा इस त्रुटि

प्रकार 'System.NotSupportedException' की एक अपवाद UWPApp.exe में हुई लेकिन उपयोगकर्ता कोड में संभाला नहीं गया था प्राप्त

वहाँ है इस तरह से मैं पूरी एप्लिकेशन थीम को लाइट से डार्क या इसके विपरीत बदल सकता हूं?

मैं VS2015

+0

टेम्पलेट 10 टेम्पलेट्स ने इसे बनाया है। आप इसका उपयोग कर सकते हैं या इससे समाधान प्राप्त कर सकते हैं। –

उत्तर

8

अपडेट किया गया जवाब उपयोग कर रहा हूँ कि मैं क्या अंत में पर निर्णय लिया है।

मैंने एक सेटिंग क्लास का उपयोग किया जिसमें सभी ऐप्स सेटिंग्स शामिल हैं जिनमें थीम का उपयोग करना शामिल है। चूंकि थीम केवल तभी सेट की जा सकती है जब इसे शुरू किया जाए, हमें इसे सेट करना सुनिश्चित करना होगा।

RequestedTheme="Light" 

हैं: इस संपत्ति को दूर

public App() 
{ 
    //Load settings 
    AppSettings.LoadSettings(); 
    this.RequestedTheme = AppSettings.SelectedTheme; 

    this.InitializeComponent(); 
} 

App.xaml फ़ाइल में सुनिश्चित करें कि रहे हैं:

App.xaml.cs फ़ाइल में: इस कोड मैं प्रयोग किया जाता है इसे हमेशा इसे बदलने के लिए किसी भी तरह से प्रकाश के लिए डिफ़ॉल्ट नहीं हटा दिया गया है।

इस तरह से उपयोगकर्ता थीम चुन सकता है, यह ऐप शुरू होने पर संग्रहीत और उपयोग किया जाता है। बस इसे लोड करना सुनिश्चित करें और ऐप प्रारंभिक चरण में इसे लागू करें।

+0

हाय आपके सुझाव की सराहना करते हैं, मैं माइक्रोसॉफ्ट द्वारा प्रदान की गई डिफ़ॉल्ट अंधेरे और हल्की थीम का उपयोग करने के बजाय अधिक लचीली थीम बनाने के लिए आपके सुझाव की जांच कर सकता हूं। लेकिन अगर आप एक ट्यूटोरियल या किसी भी तरह की साइट पर सीधा लिंक प्रदान कर सकते हैं तो मैं इसकी अधिक सराहना करता हूं जहां मैं इसके बारे में अधिक जान सकता हूं। आपका बहुत बहुत धन्यवाद! – Darcy

+0

तो, थीम को प्रभावी होने के लिए ऐप को पुनरारंभ करने की आवश्यकता होगी? –

+0

हां, इसके तुरंत बाद आपको ऐप के अंदर एक थीम बनाना होगा और फिर उन्हें ऐप में प्रत्येक तत्व पर लागू करना होगा। – Threezool

7

आवेदन का अनुरोध किया गया थीम केवल निर्माता में अपडेट किया जा सकता है। हालांकि (जैसा कि आपने खोजा है), पृष्ठ के अनुरोधित थीम को किसी भी समय रनटाइम में अपडेट किया जा सकता है।

यह वास्तव में कष्टप्रद मुझे पता है और वहाँ इस स्थिति अन्य इस MSDN पेज से के बारे में ज्यादा जानकारी नहीं है:

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.requestedtheme?f=255&MSPPError=-2147217396

जब अनुप्रयोग शुरू कर दिया है विषय केवल सेट किया जा सकता है, यह नहीं है, जबकि चल रहा है। ऐप चल रहा है, जबकि RequestedTheme सेट करने का प्रयास अपवाद फेंकता है (माइक्रोसॉफ्ट .NET कोड के लिए समर्थित नहीं है)। यदि आप उपयोगकर्ता को ऐप यूआई का हिस्सा चुनने का विकल्प देते हैं, तो आपको ऐप डेटा में सेटिंग को सहेजना होगा और ऐप को पुनरारंभ होने पर इसे लागू करना होगा।

वहाँ समाधान होना चाहिए लेकिन वे बहुत dumb.Microsoft ग्रूव हालांकि तरह अपनी आधिकारिक क्षुधा में यह कर रही होगी ...

मेरे समाधान तत्व स्तर, नहीं आवेदन पर विषय को अपडेट करने में कर रहा है स्तर।

  1. अपनी खुद की BasePage बनाएँ (पृष्ठ से विरासत में मिली)
  2. एक स्थिर वर्ग के अंतर्गत अपनी सेटिंग रखें और मॉडल परिवर्तन पर नज़र रखने के लिए एक ईवेंट बनाएं रखें।
  3. अपने बेसपेज के निर्माता में इस घटना को सुनें और वहां होने पर परिवर्तन लागू करें।

मैं अभी कोड उदाहरण प्रदान करने में सक्षम नहीं हूं (क्योंकि आज मैं बहुत व्यस्त हूं), लेकिन यह अब तक का सबसे प्रभावी तरीका IMHO है।

+0

आपके उत्तर के लिए हाय धन्यवाद, अभी मैं क्या करता हूं कि नया विषय सहेजा जाएगा लेकिन एप्लिकेशन को प्रभावी होने के लिए पुनरारंभ करने की आवश्यकता है। – Darcy

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