2012-04-29 6 views
10

Nel progetto WPF, i riferimenti utilizzati solo in xaml non vengono copiati nella cartella bin anche con CopyLocal impostato su true, come indicato in this post. Con il pattern MVVM, è comune che i controlli di terze parti vengano utilizzati senza riferimenti code-behind.L'assembly utilizzato solo in XAML non viene copiato nella cartella bin

Ispirato a this post, sto usando la soluzione qui sotto. È abbastanza facile, tuttavia, è necessario mantenere manualmente l'elenco delle variabili in sincrono con quelli effettivamente utilizzati nei file XAML attraverso il progetto, che sono soggetti a cambiamenti costanti. La mia domanda è se esiste una soluzione reale o una soluzione migliore? (Sono consapevole l'idea di usare lo script di post-generazione, che secondo me è meno discover-grado e più vulnerabili ai cambiamenti.)

internal static class BuildTricker 
{ 
    private static readonly RadTreeView radTreeView; 
    static BuildTricker() 
    { 
     // Set and get once to avoid compiler optimization. 
     radTreeView = null; 
     if (radTreeView != null) 
     { 
      throw new InvalidOperationException("This should never happen."); 
     } 
    } 
} 
+0

Ecco RAD/Telerik - se è nel GAC si potrebbe provare questo - [ vero] (http://stackoverflow.com/a/8703079/417747) – NSGaga

+0

Non è specifico per RadControls e il tag '' è l'implementazione della proprietà 'CopyLocal'. –

risposta

7

La soluzione che uso è quello di assicurarsi l'oggetto è un nome definito in lo XAML. Questo fa sì che crei un'istanza per esso nel codice generato dietro la classe (parziale). Questo è sufficiente per il sistema di riferimento seguente per rilevare il riferimento e copiare nella dll di dipendenza.

es .:

<ts:HorizontalToggleSwitch IsChecked="{Binding ShowMyItemsOnly}" 
          CheckedContent="Show My Items Only" 
          UncheckedContent="Show All Items" 
          x:Name="NameRequiredForCopyLocal"> 
+0

Utilizzo una dipendenza di terze parti per il markup obbligatorio e apparentemente non funziona ... –

+1

Questo problema risolve il problema con oxyplot. Grazie! –

+0

Sembra che questa soluzione non funzioni se il controllo si verifica solo nei modelli di controllo. –

1

Questo è un problema noto con XAML-Code. C'è qualcosa di strano durante l'analisi del codice XAML perché VisualStudio sa che viene utilizzata la DLL corrispondente. Per il mio caso ha aiutato a creare un attributo di qualsiasi oggetto dalla DLL specifica nel codice dietro la classe o qualsiasi classe nel progetto. (Soluzione)

Ad esempio:

// This is only for the build process, to copy target assembly to output. 
private RadTreeView _TreeViewForCompiler; 
Problemi correlati