xaml
Travailler avec des fichiers XAML personnalisés
Recherche…
Lire un objet depuis XAML
Considérez qu'une structure des classes suivantes devrait être construite en XAML puis lue dans un objet CLR:
namespace CustomXaml
{
public class Test
{
public string Value { get; set; }
public List<TestChild> Children { get; set; } = new List<TestChild>();
}
public class TestChild
{
public string StringValue { get; set; }
public int IntValue { get; set; }
}
}
Les classes doivent soit ne pas avoir de constructeur explicite, soit fournir un constructeur vide. Pour garder le XAML propre, les collections doivent être initialisées. L'initialisation des collections dans XAML est également possible.
Pour lire XAML, la classe XamlServices peut être utilisée. Il est défini dans System.Xaml et doit être ajouté aux références. La ligne suivante lit ensuite le fichier test.xaml à partir du disque:
Test test = XamlServices.Load("test.xaml") as Test;
La méthode XamlServices.Load a plusieurs surcharges à charger depuis les flux et autres sources. Si vous lisez XAML à partir d'un fichier incorporé (comme c'est le cas dans WPF), la propriété Build Action génération définie sur Page par défaut doit être modifiée en une Embedded Resource . Sinon, le compilateur demandera des références aux assemblys WPF.
Le contenu du fichier XAML à lire devrait ressembler à ceci:
<Test xmlns="clr-namespace:CustomXaml;assembly=CustomXaml"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Value="test">
<Test.Children>
<TestChild StringValue="abc" IntValue="123"/>
<TestChild StringValue="{x:Null}" IntValue="456"/>
</Test.Children>
</Test>
La définition pure xmlns permet l'utilisation de classes dans le même espace de noms sans préfixe. La définition de xmlns:x est nécessaire pour utiliser des constructions comme {x:Null} . Bien sûr, les préfixes pour d'autres espaces de noms ou assemblages peuvent être définis selon les besoins.
Écrire un objet dans XAML
Considérez qu'une structure des classes suivantes devrait être construite en XAML puis lue dans un objet CLR:
namespace CustomXaml
{
public class Test
{
public string Value { get; set; }
public List<TestChild> Children { get; set; } = new List<TestChild>();
}
public class TestChild
{
public string StringValue { get; set; }
public int IntValue { get; set; }
}
}
Pour écrire XAML, la classe XamlServices peut être utilisée. Il est défini dans System.Xaml et doit être ajouté aux références. La ligne suivante écrit alors le test instance de type Test dans le fichier test.xaml sur le disque:
XamlServices.Save("test.xaml", test);
La méthode XamlServices.Save a plusieurs surcharges à écrire dans les flux et autres cibles. Le XAML résultant doit ressembler à ceci:
<Test Value="test" xmlns="clr-namespace:CustomXaml;assembly=CustomXaml"
xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Test.Children>
<scg:List x:TypeArguments="TestChild" Capacity="4">
<TestChild IntValue="123" StringValue="abc" />
<TestChild IntValue="456" StringValue="{x:Null}" />
</scg:List>
</Test.Children>
</Test>
La définition pure xmlns permet l'utilisation de classes dans le même espace de noms sans préfixe. La définition de xmlns:x est nécessaire pour utiliser des constructions comme {x:Null} . Le rédacteur ajoute automatiquement le xmlns:scg pour initialiser une List<TestChild> pour la propriété Children de l'objet Test . Il ne repose pas sur la propriété en cours d'initialisation par le constructeur.