2009-04-20 2 views
3

Ich arbeite an einer WPF-Anwendung, und bis vor kurzem hatte ich ein ResourceDictionary in meinem Hauptfenster Ressourcen Teil der XAML. Das Ressourcenwörterbuch enthielt eine DataTemplate, mit der mehrere Listboxen im Fenster formatiert wurden. Die XAML für dieses Datatemplate enthalten Hinweise auf Event-Handler, zB:WPF-Code-Behind für Ressourcen?

<Button n:Name="btnClickMe" Content="Click Me!" LeftMouseButtonUp="btnClickMe_Click" /> 

ich vor kurzem beschlossen, den Inhalt des Fensters aufgeteilt in separate Bedienelemente und meine Resource in seiner eigenen Datei zu bewegen. Aber natürlich gibt es keine Code-Behind-Datei für eine Ressourcenwörterbuchdatei. Wie kann ich das anschließen, wenn sich Dinge wie beschrieben aufteilen?

Vielen Dank im Voraus!

Antwort

3

Sie können einem ResourceDictionary einen Code-Behind hinzufügen; vergewissere dich, dass deine Klassennamen korrekt referenziert sind. Zum Beispiel in der Resource, wenn Sie mit AppStyles.xaml arbeiten die XAML-Datei eine Klasse haben würde:

x:Class="Client.App.Shell.themes.AppStyles" 

Im Code-behind, AppStyles.xaml.cs, würden Sie sicherstellen, dass die Klasse haben :

namespace Client.App.Shell.themes 
{ 
    public partial class AppStyles 
    ... 
+0

Und vergessen Sie nicht, InitializeComponent aus dem Konstruktor der CodeBehind-Klasse aufzurufen - soweit ich weiß, gibt es keine integrierte Möglichkeit, VS dazu zu bringen, dies für Sie zu tun! – itowlson

+0

Tatsächlich, in der Implementierung, die ich in meiner aktuellen Anwendung habe, erfordert es aus irgendeinem Grund nicht InitializeComponent(). Ich nehme an, dass es daran liegt, dass es keine Visuals zusammenstellt, sondern nur als Wörterbuch fungiert, aber ich bin mir nicht 100% sicher. –

+0

Vielleicht liegt es daran, dass wir diese Technik für eine freundliche Wörterbuchzusammenführung verwenden, dh in der Lage, statt oder was auch immer zu schreiben Die Beschwörung ist * grins *. Wenn Sie die letztere Syntax verwenden, bin ich sicher, dass Sie Recht haben, InitializeComponent ist wahrscheinlich nicht erforderlich. Entschuldigung für jede Verwirrung! – itowlson

1

Sie können eine neue Klasse hinzufügen und Namen mit dem gleichen Namen wie die Ressource Wörterbuch plus die .cs Erweiterung und Visual Studio automatisch die Dinge so einrichten wird es der Code hinter Datei. Wenn Sie ein Ressourcenwörterbuch mit dem Namen Buttons.xaml haben, fügen Sie eine Datei mit dem Namen Buttons.xaml.cs hinzu.