2015-08-19 15 views
7

Ho due progetti simili. Uno è un progetto Silverlight e l'altro un WPF. Entrambi contengono alcuni spazi dei nomi e molti controlli utente personalizzati.Perché XAML (WPF) non esegue ricerche nelle definizioni di spazio dei nomi XML per i controlli?

Poiché i controlli sono distribuiti su più spazi dei nomi, devo definirli in alcuni spazi dei nomi, quando li utilizzo. Così ho iniziato a define the XML namespaces in the AssemblyInfo.cs:

[assembly: XmlnsPrefix("http://ui.example.com/xaml/touch", "cui")] 
[assembly: XmlnsDefinition("http://ui.example.com/xaml/touch", "example_ui.controls")] 
[assembly: XmlnsDefinition("http://ui.example.com/xaml/touch", "example_ui.themes")] 

Ora devo definire un solo spazio dei nomi in ogni file:

xmlns:cui="http://ui.example.com/xaml/touch" 

Purtroppo questo solo opere in Silverlight. La mia domanda è, come faccio a farlo funzionare in un progetto WPF?

Nel progetto WPF ottengo gli errori come questo:

Error 5 The tag 'LookUpField' does not exist in XML namespace 
    'http://ui.example.com/xaml/touch'. Line 7 Position 14. D:\src\prototype\lookup-control\lookup-control\MainWindow.xaml 7 14 lookup-control 
+0

si utilizzano gli stessi assiemi per WPF e Silverlight? Forse WPF non può usare i controlli Silverlight – Domysee

+0

No, l'ho provato come un esempio minimo. Due progetti, uno silverlight e uno wpf. Non sono collegati in alcun modo. Entrambi hanno un controllo utente personalizzato e un modo per visualizzarlo. – Robin

+0

Sto parlando dei progetti reali nel post, perché volevo dare alla domanda un contesto/background. – Robin

risposta

1

parer il tutorial lavorato per Silverlight, credo che possa essere impreciso per WPF. Vedi risposta accettata here.

Ho un assembly separato con controlli personalizzati in WPF e sono in grado di utilizzare l'attributo XmlnsDefinition senza problemi. Penso che il problema risieda nelle definizioni che devono esistere prima che l'assembly sia costruito. Quindi, anche se i controlli verranno visualizzati nel tuo designer, non possono essere creati perché il compilatore ha bisogno delle definizioni durante la compilazione dello XAML in BAML che sono built into the assembly at a later point.

Modifica

ho creato un'altra libreria di controllo utente WPF e ha aggiunto la stessa XmlnsDefinition s è stato utilizzato, ha aggiunto il riferimento della libreria di controllo utente alla progetto di applicazione WPF, utilizzato <cui:UserControl1 /> nel mio MainWindow.xaml e aveva nessun errore .

Problemi correlati