[WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ?
Le chargement dynamique de fichiers XAML, dans une application WPF, est souvent une tâche assez délicate.
En effet, lorsque le fichier ne contient que des éléments ne proposant pas d'intéraction avec l'utilisateur, tout ce passe bien, il est possible d'utiliser la méthode XamlReader.Load:
var s = File.Open("DemoWindow.xaml", FileMode.Open);
XamlReader.Load(s);
Seulement, dès lors que l'attribut x:Class est présent dans le code XAML, l'erreur suivante est déclenchée:
'Class' attribute does not exist in XML namespace 'http://schemas.microsoft.com/winfx/2006/xaml' namespace. Line '1' Position '9'
Pour éviter cette erreur, et ainsi charger le fichier XAML définissant des EventHandler, il suffit d'utiliser la méthode générée par le compilateur lorsqu'il transforme les fichiers XAML en fichier .g.cs (ou .g.vb): la méthode Application.LoadComponent:
Window window = Application.LoadComponent(new Uri("/TestDynamicLoading;component/Window2.xaml", UriKind.Relative)) as Window;
if (window != null)
{
window.ShowDialog();
}
Notez bien la syntaxe "particulière":
/NomDeLAssembly;component/NomDuFichierXAMLACharger
De cette manière, le chargement est un succès, même si des gestionnaires d'évènements sont définits dans le fichier !
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :