2016-01-23 5 views
11

मैंने निम्नलिखित कोड लिखा, लेकिन XamlParseException बीन फेंक दिया गया है। ("StaticResource कुंजी CustomColor के लिए नहीं मिला")Xamarin.Forms: मैं किसी अन्य फ़ाइल से ResourceDictionary कैसे लोड कर सकता हूं?

MyPage.xaml

<?xml version="1.0" encoding="UTF-8"?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="XFApp11.MyPage"> 
    <ContentPage.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="CustomResource.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </ContentPage.Resources> 

    <ContentPage.Content> 
     <BoxView Color="{StaticResource CustomColor}" /> 
    </ContentPage.Content> 
</ContentPage> 

CustomResource.xaml (कार्रवाई का निर्माण = EmbeddedResource)

<?xml version="1.0" encoding="UTF-8" ?> 
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"> 
    <Color x:Key="CustomColor">#004B86</Color> 
</ResourceDictionary> 

उत्तर

9

मर्ज किए गए शब्दकोश Xamarin में समर्थित नहीं हैं XAML फॉर्म्स 2.1.0

एकमात्र तरीका यह है कि आप इसे कर सकते हैं, इसे किसी अन्य पृष्ठ में रखना है और फिर उसे कोड में लोड करना और स्टेटिक के बजाय डायनामिक रिसोर्स के माध्यम से इसका संदर्भ देना है संसाधन।

मैं इस अधिक यहाँ समझाने: http://www.xamarinhelp.com/styling-uiux-day-11/

हालांकि 2.1.0-pre1 (इस हफ्ते रिलीज) के रूप में, अब आप templating है, जो एक और तरीका यह करने के लिए है कर सकते हैं। जेसन स्मिथ यह बारे में ब्लॉग किया: http://xfcomplete.net/general/2016/01/20/control-templates/

अद्यतन: 2.3.0 के रूप में आप एक विशेषता MergedWith कहा जाता है के साथ एक मर्ज किए गए शब्दकोश कर सकते हैं।

एक नया XAML फ़ाइल

<?xml version="1.0" encoding="utf-8" ?> 
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        x:Class="UIDemo.Style.NewStyle"> 
    <Style TargetType="Label"> 
     <Setter Property="TextColor" Value="Blue" /> 
    </Style> 
</ResourceDictionary> 

अपने ContentPage अपने ResourceDictionary पर MergedWith विशेषता का उपयोग में अब बनाएँ।

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:theme="clr-namespace:UIDemo.Style" 
      x:Class="UIDemo.MainPage"> 
    <ContentPage.Resources> 
     <ResourceDictionary MergedWith="theme:NewStyle" /> 
    </ContentPage.Resources> 
    <Grid> 
     <Label Text="Hello" /> 
    </Grid> 
</ContentPage> 
+0

उत्तर के लिए धन्यवाद, संसाधन डॉट। स्रोत संपत्ति भी समर्थित नहीं है? – P3PPP

+0

ऐसा नहीं है कि मुझे पता है। मैं थोड़ी देर पहले इसे देखकर याद रखता हूं। आप XF में अपने संसाधन शब्दकोश के लिए किसी अन्य XAML फ़ाइल का संदर्भ नहीं दे सकते। लेकिन मैं अभी नहीं गया और परीक्षण किया है कि अगर आप कर सकते हैं, तो कृपया मुझे सही करें :) –

+0

मैंने आपके उत्तरों का पालन किया, जब मैं डिबगिंग कर रहा हूं, मुझे संसाधन सूची दिखाई देती है, गिनती संपत्ति में मेरे सभी संसाधन शामिल हैं (मेरा कोड 54 है) लेकिन कुंजी और मान नहीं है (मेरा कोड केवल 1 कुंजी और मान है)। यह रनटाइम त्रुटि भी संसाधन कुंजी XXX नहीं मिला है। ऐसा लगता है कि यह विलय संसाधन जानता है लेकिन यह लागू नहीं है – zquanghoangz

13

2.3.0 के रूप में आधिकारिक तौर पर संसाधन शब्दकोशों विलय कर सकते हैं XAML में निम्न उदाहरण

निरीक्षण BlueTheme.xaml

<?xml version="1.0" encoding="utf-8" ?> 
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms" 
        xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
        x:Class="UI.Themes.BlueTheme"> 
    <Style TargetType="Label"> 
     <Setter Property="TextColor" Value="Blue" /> 
    </Style> 
</ResourceDictionary> 

App.xaml

<?xml version="1.0" encoding="utf-8" ?> 
<Application xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      xmlns:theme="clr-namespace:UI.Themes" 
      x:Class="UI.App"> 
    <Application.Resources> 
     <ResourceDictionary MergedWith="themes:BlueTheme" /> 
    </Application.Resources> 
    <Label Text="Hello" /> 
</Application> 
+0

आप BlueTheme.xaml का उत्तराधिकारी किस प्रकार उपयोग करते थे। क्या आप कोड BlueTheme.xaml साझा कर सकते हैं।सीएस –

+2

यह Xaml से स्पष्ट होना चाहिए: *** संसाधन डॉट *** *** यदि उसके पास एक अलग बेस क्लास था तो मुझे *** स्थानीय जैसा कुछ लिखना होगा: संसाधन डॉट *** –

+0

यह Xaml से स्पष्ट होना चाहिए : *** संसाधन डिक्शनरी *** यदि उसके पास एक अलग कस्टम बेस क्लास था, तो मुझे *** कस्टम-नेमस्पेस के समान कुछ लिखना होगा: संसाधन डिक्शनरी *** इसके अलावा *** संसाधन डॉट *** सार्वजनिक है '*** 2.3.0 *** –

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

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