9

In WPF è stato possibile organizzare XAML per più controlli utente mantenendo la marcatura in file XAML separati nella cartella temi e quindi utilizzando MergedDictionaries per importarli in generic.xaml:Utilizzo di MergedDictionaries in generic.xaml in Silverlight 3

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="MyFirstControl.xaml" /> 
     <ResourceDictionary Source="MySecondControl.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Con la disponibilità della beta Silverlight 3 che introduce il supporto del dizionario unito, sembrava che fosse possibile fare lo stesso con i controlli utente di Silverlight. Ma nonostante provi tutte le combinazioni di azione build sui file del dizionario unito e la sintassi corrispondente per il riferimento di origine in generic.xaml, non riesco a farlo funzionare.

Qualcun altro ha provato? Qualcuno sa se è possibile e se sì cosa sto facendo male?


OK - così dopo numerosi progetti di test, ottenendo campioni che lavorano in WPF e spostando il codice XAML e C# oltre a Silverlight 3 e non riesce ancora, ho fatto una disinstallazione completa e reinstalla di TUTTE le Silverlight 2 bit E TUTTI i beta bit Silverlight 3 e finalmente ha funzionato.

Posso solo supporre che in qualche modo si sia conclusa con un'installazione difettosa della beta - non lo so ma sembrava che stavo ancora eseguendo il runtime di Silverlight 2 nonostante apparentemente avesse installato il runtime versione 3.

Grazie Jared per dare un'occhiata a cose e controllando con la squadra SL3 ... e grazie a Amy Dullard e Shawn Wildermuth per la produzione delle istruzioni e file batch per l'esecuzione di Silverlight 2 & 3 sulla stessa macchina.

risposta

12

Ho appena provato quanto segue in un controllo utente e ha funzionato:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="ResourcesA.xaml" /> 
      <ResourceDictionary Source="ResourcesB.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
<StackPanel> 
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResAColor}" /> 
    <Rectangle Width="100" Height="100" Fill="{StaticResource ResBColor}" /> 
</StackPanel> 

Ma specificamente menziona generic.xaml. Che tipo di problema stai avendo?

- EDIT

Sulla base delle osservazioni supplementari, ho parlato con la squadra SL3 e ottenuto la seguente risposta:

funziona per me, utilizzando generic.xaml compilati come risorsa, e utilizzando la sintassi completa delle risorse. C'è un bug di non essere in grado di utilizzare URI relativi per l'origine in generic.xaml (31783), ma il non relativo modulo dovrebbe funzionare bene

<ResourceDictionary Source='/SilverlightClassLibrary1;component/CustomControl.xaml'/> 

in generic.xaml, e modificare la build azioni per sia generic.xaml che CustomControl.xaml come risorse. Fammi sapere se ci sono ancora problemi: se ottieni una riproduzione, posso dargli un'occhiata.

Questo aiuto?

+0

Ho avuto l'impressione che MergedDictionaries non fosse supportato in Silverlight. È nuovo in SL3? – Rich

+0

Sì, nuovo su SL3. –

+0

Sì, non ho problemi a utilizzare le risorse unite in genere, ma provare a utilizzare file xaml separati per gli stili/modelli di diversi comandi utente e riunirli come dizionari uniti in un file generic.xaml è ciò che mi dà problemi. –

1

Se MySecondControl.xaml utilizza una risorsa da MyFirstControl.xaml, l'ordine in cui vengono aggiunti a generic.xaml's ResourceDictionary non ha importanza. È necessario includere in modo ridondante MyFirstControl.xaml in MySecondControl.xaml. MySecondControl.xaml deve contenere:

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source='/MyControls;component/Themes/MyFirstControl.xaml'/> 
</ResourceDictionary.MergedDictionaries> 
<!-- ... Contents of MySecondControl.xaml --> 
0

Ho appena risolto questo problema. ResourceDictionaries supporta MergedDictionaries, ma per controlli personalizzati basati su modelli che utilizzano Generic.xaml, Generic.xaml non supporta MergedDictionaries. Quindi ci sono due scelte: (1) o ammucchia tutti i tuoi modelli in Generic.xaml; oppure (2) crei YourOwnDictionary.xaml, unisci tutti i tuoi dizionari separati in YourOwnDictionary.xaml e fai riferimento a YourOwnDictionary.xaml da usercontrols e pagine. Questa sembra essere una caratteristica/bug di precedenti versioni di Silverlight che non supportava i dizionari uniti.

Problemi correlati