2009-04-20 10 views
3

Je travaille sur une application wpf, et jusqu'à récemment, j'avais un ResourceDictionary dans la partie ressources de ma fenêtre principale de xaml. Le dictionnaire de ressources contenait un DataTemplate qui était utilisé pour styliser plusieurs zones de liste dans la fenêtre. Le XAML pour cette DataTemplate contenait des pointeurs vers des gestionnaires d'événements, par exemple:WPF code-behind pour les ressources?

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

J'ai récemment décidé de scinder le contenu de la fenêtre vers le haut dans les contrôles utilisateur séparés, et de déplacer mon ResourceDictionary dans son propre fichier. Mais, bien sûr, il n'y a pas de fichier code-behind pour un fichier de dictionnaire de ressources. Comment puis-je câbler ça, avec les choses séparées comme je l'ai décrit?

Merci d'avance!

Répondre

3

Vous pouvez ajouter un code-behind à un ResourceDictionary; Assurez-vous simplement que vos noms de classe sont correctement référencés. Par exemple, dans le ResourceDictionary si vous travaillez avec AppStyles.xaml le fichier XAML aurait une classe de:

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

Dans le code-behind, AppStyles.xaml.cs, vous serait sûr d'avoir la classe :

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

Et n'oubliez pas d'appeler InitializeComponent à partir du constructeur de la classe code-behind - autant que je sache, il n'y a pas de façon intégrée pour que VS fasse cela pour vous! – itowlson

+0

En fait, dans l'implémentation que j'ai dans mon application actuelle, il ne nécessite pas InitializeComponent() pour une raison quelconque. J'imagine que c'est parce que ça ne compile pas vraiment de visuels, juste comme dictionnaire, mais je ne suis pas sûr à 100%. –

+0

Peut-être que c'est parce que nous utilisons cette technique pour la fusion amicale de dictionnaire, c'est-à-dire être capable d'écrire plutôt que ou autre l'incantation est * sourire *. Si vous utilisez la dernière syntaxe alors je suis sûr que vous avez raison, InitializeComponent n'est probablement pas nécessaire. Désolé pour toute confusion! – itowlson

1

Vous pouvez ajouter une nouvelle classe et nommez-le avec le même nom que votre dictionnaire de ressources ainsi que l'extension .cs et Visual Studio définit automatiquement les choses de sorte qu'il devient le code derrière fichier. Par exemple si vous avez un dictionnaire de ressources appelé Buttons.xaml, ajoutez un fichier appelé Buttons.xaml.cs.

Questions connexes