Bonjour,
j'ai besoin de sérialiser puis de désérialiser un usercontrol, pour cela, j'ai voulu utilisé XamlWriter/XamlReader
J'ai fais un usercontrol tout simple:
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<UserControl x:Class="UCTest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Button x:Name="btnTest" Content="Hello !" Width="50" Height="25"/>
    </Grid>
</UserControl>

et voici mon code pour serialiser/déserialiser
Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
'nouveau usercontrol
Dim uc As New UCTest()
'on sérialise le usercontrol
Dim str As String = Markup.XamlWriter.Save(uc)
 
'traitement ...
 
Dim stringReader As New IO.StringReader(str)
Dim xmlReader As Xml.XmlReader = Xml.XmlReader.Create(stringReader)
'on déserialise le usercontrol
Dim obj = CObj(Markup.XamlReader.Load(xmlReader)) ' -> exception

et j'obtiens l'exception suivante:
La valeur 'btnTest' ne peut pas être attribuée à la propriété 'Name' de l'objet 'System.Windows.Controls.Button'. Impossible d'inscrire en double Name 'btnTest' dans cette portée.
En sachant que pour tester, je n'ai fais aucune modification sur str (le usercontrol sérialiser)
J'obtiens la même erreur si dans le usercontrol, a la place de "x:Name" je met simplement "Name".
Et je n'ai pas d'erreur s'il je ne spécifie pas de "Name"
La chaine que j'obtiens après le XamlWriter est :
<UCTest xmlns="clr-namespace:WpfApplication;assembly=WpfApplication" xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation"><av:Grid><av:Button Name="btnTest" Width="50" Height="25">Hello !</av:Button></av:Grid></UCTest>