Associer du code-behind à un fichier XAML (notamment à un ResourceDictionary)

On oublie souvent que le code-behind n'est pas réservé aux uniques descendants de Control, mais que cette association est possible quel que soit le fichier XAML. L'exemple inclus associe un fichier XAML contenant un ResourceDictionary définissant un style. A ce style est associé un EventHandler dont le code permet d'avoir un comportement qui ne serait pas évident (voire impossible) à définir en XAML.

 Afin de réaliser une telle association il suffira donc :

  • D'ajouter l'attribut x:Class à la balise racine en spécifiant un nom de classe complet

    <ResourceDictionary xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"

       xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"

       x:Class="EventSetterStyleXClass.MyStyleDictionary">

       

        <Style x:Key="MyButtonStyle" TargetType="{x:Type Button}">      

            <EventSetter Event="ButtonBase.MouseEnter" Handler="MyButtonStyle_MouseEnter"/>

  • D'ajouter un fichier C# (la convention de nommage étant de MonFichier.xaml.cs) et d'y définir une classe partielle dont le nom complet est celui précisé lors du point précédent.

    namespace EventSetterStyleXClass

    {

      partial class MyStyleDictionary

      {

        public void MyButtonStyle_MouseEnter(object sender, RoutedEventArgs ea)

        { …

Et merci à Patrice pour l'idée de ce post !

EventSetterStyleXClass.zip