Est-il possible de définir du code derrière un dictionnaire de ressources dans WPF. Par exemple, dans un usercontrol pour un bouton, vous le déclarez en XAML. Le code de gestion des événements pour le clic sur le bouton est effectué dans le fichier de code derrière le contrôle. Si je devais créer un modèle de données avec un bouton, comment puis-je écrire le code du gestionnaire d'événements pour son clic de bouton dans le dictionnaire de ressources.
147
Réponses:
Je pense que ce que vous demandez, c'est que vous voulez un fichier code-behind pour un ResourceDictionary. Vous pouvez totalement le faire! En fait, vous procédez de la même manière que pour une fenêtre:
Supposons que vous ayez un ResourceDictionary appelé MyResourceDictionary. Dans votre fichier MyResourceDictionary.xaml, placez l'attribut x: Class dans l'élément racine, comme ceci:
Ensuite, créez un code derrière le fichier appelé MyResourceDictionary.xaml.cs avec la déclaration suivante:
Et tu as fini. Vous pouvez mettre ce que vous voulez dans le code derrière: méthodes, propriétés et gestionnaires d'événements.
== Mise à jour pour les applications Windows 10 ==
Et juste au cas où vous joueriez avec UWP, il y a encore une chose à savoir:
la source
x:Class="MyCompany.MyProject.MySubFolder1.MyResourceDictionary"
Sinon, si vous mettez simplement x: Class = "MyResourceDictionary", l'analyseur xaml ne trouvera pas votre classe.Je ne suis pas d'accord avec "ageektrapped" ... utiliser la méthode d'une classe partielle n'est pas une bonne pratique. Quel serait alors le but de séparer le dictionnaire de la page?
À partir d'un code-behind, vous pouvez accéder à l'élément ax: Name en utilisant:
Vous pouvez faire cela dans la méthode OnApplyTemplate si vous voulez brancher des contrôles à quand votre charge les de contrôle sur mesure. OnApplyTemplate doit être remplacé pour ce faire. Ceci est une pratique courante et permet à votre style de rester déconnecté du contrôle. (Le style ne doit pas dépendre du contrôle, mais le contrôle doit dépendre du style).
la source
Gishu - bien que cela puisse sembler être une "pratique généralement à ne pas encourager" Voici une raison pour laquelle vous pourriez vouloir le faire:
Le comportement standard des zones de texte lorsqu'elles obtiennent le focus consiste à placer le curseur à la même position que lorsque le contrôle a perdu le focus. Si vous préférez dans toute votre application que lorsque l'utilisateur clique sur une zone de texte pour que tout le contenu de la zone de texte soit mis en surbrillance, l'ajout d'un simple gestionnaire dans le dictionnaire de ressources ferait l'affaire.
Toute autre raison pour laquelle vous souhaitez que le comportement d'interaction utilisateur par défaut soit différent du comportement prêt à l'emploi semble être de bons candidats pour un code derrière dans un dictionnaire de ressources.
Tout à fait d'accord que tout ce qui est spécifique à une fonctionnalité d'application ne doit pas être dans un code derrière un dictionnaire de ressources.
la source
XAML sert à construire des graphiques d'objets ne contenant pas de code.
Un modèle de données est utilisé pour indiquer comment un objet utilisateur personnalisé doit être rendu à l'écran ... (par exemple, s'il s'agit d'un élément de listbox), le comportement ne fait pas partie du domaine d'expertise d'un modèle de données. Redessiner la solution ...
la source