2012-04-29 6 views
10

In WPF-Projekten werden nur in XAML verwendete Referenzen nicht in den Bin-Ordner kopiert, selbst wenn CopyLocal auf "true" gesetzt ist, wie in this post beschwert. Mit dem MVVM-Muster ist es üblich, dass Steuerelemente von Drittanbietern ohne Code-Behind-Referenzen verwendet werden.Assembly, das nur in XAML verwendet wird, wird nicht in den Bin-Ordner kopiert

Inspiriert von this post, ich bin mit dem folgenden Problem zu umgehen. Es ist jedoch leicht genug, die Variablenliste manuell mit denen zu synchronisieren, die tatsächlich in den XAML-Dateien im Projekt verwendet werden und die ständigen Änderungen unterliegen. Meine Frage ist, ob es eine echte Lösung oder einen besseren Workaround gibt. (Ich bin mir der Idee der Verwendung von Post-Build-Skript, das IMHO weniger discover-fähig und anfällige für Veränderungen.)

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

Das ist RAD/Telerik - wenn es im GAC ist Sie dies versuchen könnte - [ Wahre] (http://stackoverflow.com/a/8703079/417747) – NSGaga

+0

Es ist nicht spezifisch für RadControls, und '' Tag ist die Implementierung der 'CopyLocal' Eigenschaft. –

Antwort

7

Die Abhilfe, die ich verwende, ist sicherzustellen, dass das Element ein Name definiert in das XAML. Dies bewirkt, dass es im generierten Code hinter (Teil-) Klasse eine Instanz dafür erzeugt. Dies reicht aus, damit das Referenzsystem die Referenz erkennt und in die Abhängigkeitsdll kopiert.

z.B .:

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

Ich verwende eine Abhängigkeit von Drittanbietern für die Bindung Markup, und anscheinend funktioniert das nicht ... –

+1

Dies behoben mein Problem mit Oxyplot. Vielen Dank! –

+0

Es sieht aus wie diese Lösung nicht funktioniert, wenn das Steuerelement nur in Steuerelementvorlagen auftritt. –

1

Dies ist ein bekanntes Problem mit XAML-Codes. Beim Parsen des XAML-Codes ist etwas seltsam, weil VisualStudio weiß, dass die entsprechende DLL verwendet wird. Für meinen Fall half es, ein Attribut eines beliebigen Objekts aus der spezifischen DLL im Code hinter der Klasse oder einer beliebigen Klasse im Projekt zu erstellen. (Umgehung)

Zum Beispiel:

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