Par défaut en WPF les formulaires héritent de la classe System.Windows.Window.
Or il est peut être interessant de les faire hériter d'une classe tierse dans laquelle on factorise un certain nombre de choses (cette classe héritant elle même de System.Windows.Window pour que tout fonctionne bien).
Dans le cas de l'héritage d'un type simple il suffit de procéder comme suit :
1. On définit un type de base (à ajouter dans l'assembly contenant les formulaires ou dans une assembly connue de cette dernière)
namespace IHM.Common
{
public class MyBaseWindow : Window
{
//...
}
}
2. Il faut faire hériter notre formulaire de ce type
- Coté code :
using IHM.Common;
namespace IHM.UI
{
public class Window1 : MyBaseWindow
{
//...
}
}
- Et coté XAML : (et oui ! Le compilateur nous y oblige sous peine d'une erreur "Partial declarations of 'IHM.UI.Window1' must not specify different base classes")
<src:MyBaseWindow
x:Class="IHM.UI.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:IHM.Common"
Title="Une Fenetre"
Height="300"
Width="300">
...
</src:MyBaseWindow>
Comment faire si maintenant nous souhaitons hériter d'une classe générique ?
En l'occurrence :
namespace IHM.Common
{
public class MyBaseWindow<T> : Window
{
//...
}
}
1. Coté code pas de soucis :
using IHM.Common;
using Rules;
namespace IHM.UI
{
public class Window1 : MyBaseWindow<MyRule>
{
//...
}
}
2. Coté XAML, petite subtilité avec l'utilisation de la propriété "TypeArguments" qui permet de spécifier le type générique à utiliser :
<src:MyBaseWindow
x:Class="IHM.UI.Window1"
x:TypeArguments="r:MyRule"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:IHM.UI"
xmlns:r="clr-namespace:Rules;assembly=Rules"
Title="Recherche de personnes"
Height="300"
Width="300">
</src:MyBaseWindow>
Notez la déclaration du namespace : xmlns:r="clr-namespace:Rules;assembly=Rules" (préfixé par la lettre 'r')
qui permet au compilateur de retrouver notre type 'MyRule' dans la spécification du type générique : x:TypeArguments="r:MyRule"
Currently rated 4.3 by 3 people
- Currently 4.333333/5 Stars.
- 1
- 2
- 3
- 4
- 5