2016-01-23 18 views
11

Aşağıdaki kodu yazdım, ancak XamlParseException besi attı.Xamarin.Forms: ResourceDictionary dosyasını başka bir dosyadan nasıl yükleyebilirim?

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 (işlem oluşturmak = EmbeddedResource) ("StaticResource anahtar CustomColor için bulunamadı")

<?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> 

cevap

9

Birleştirilmiş Sözlükler Xamarin desteklenmeyen XAML Forms aşağıdaki 2.1.0

Bunu yapmanın tek yolu, başka bir sayfaya koymak ve sonra kodu arkaya yerleştirmek ve Statik yerine DynamicResource aracılığıyla göndermektir. Kaynak.

Bu daha burada açıklamak: http://www.xamarinhelp.com/styling-uiux-day-11/

Ancak (bu hafta yayınlandı) 2.1.0-PRE1 itibariyle, artık bunu yapmanın başka bir yoludur şablon oluşturmayı, yapabilirsiniz. Jason Smith bu konuda blogged: http://xfcomplete.net/general/2016/01/20/control-templates/

Güncelleme: Eğer MergedWith denilen bir özelliğe sahip bir Birleştirilmiş Sözlük yapabilirsiniz 2.3.0 itibariyle.

sizin ContentPage sizin ResourceDictionary üzerinde MergedWith özellik kullanmak Şimdi yeni bir XAML dosyası

<?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> 

oluşturun.

<?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

Cevap için teşekkürler, ResourceDictionary.Source özelliği de desteklenmiyor mu? – P3PPP

+0

Farkında olduğumdan değil. Belli bir süre sonra tekrar aradığımı hatırlıyorum. XF'de kaynak sözlüğünüz için başka bir XAML dosyasına başvuruda bulunamazsınız. Ama şimdi gitmedim ve şimdi test ettim, eğer yapabiliyorsanız, birisi beni düzeltsin :) –

+0

Cevaplarımı takip ettim, hata ayıkladığımda Kaynaklar listesini görüyorum, Count özelliği tüm kaynağımı içeriyor (kodum 54) ama Tuşlar ve Değerler değil (kodum sadece 1 anahtar ve değerdir). Ayrıca, kaynak anahtarını XXX bulamadığı için çalışma zamanı hatası. Birleştirilmiş bir kaynağı bildiğine bakın ama uygulanmadı – zquanghoangz

13

2.3.0 itibariyle resmen xaml Kaynak sözlükleri birleştirebilirsiniz aşağıdaki örnek

gözlemlemek 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

Ne tür bir tür BlueTheme.xaml devralınırken kullanılır. BlueTheme.xaml kodunu paylaşabilir misiniz?cs –

+2

Bu, Xaml: *** ResourceDictionary *** 'dan açıkça anlaşılmalıdır. Eğer farklı bir taban sınıfına sahip olsaydı, *** local'a benzer bir şey yazmam gerekiyordu: ResourceDictionary *** –

+0

Bu, Xaml'dan açık olmalıdır. : *** ResourceDictionary *** farklı bir özel taban sınıfına sahip olsaydı *** custom-namespace'e benzer bir şey yazmam gerekiyorsa: ResourceDictionary *** Ayrıca *** ResourceDictionary *** is public *** 2.3.0 *** –

İlgili konular