Bonjour à tous,
Très simple: j'ai un UserControl avec seulement une RichTextBox dedans. Je l'affiche sur un canvas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <UserControl x:Class="MyNameSpace.SimpleControlRTB" xmlns:local="clr-namespace:MyNameSpace" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="200" Width="200"> <Grid> <RichTextBox x:Name="RTB" Background="Lavender" IsDocumentEnabled="False" Height="200" Width="200" BorderBrush="BlueViolet" BorderThickness="4" /> </Grid> </UserControl>
J'essaie de sérialiser puis désérialiser ce UserControl.
Si je le fais directement sur le UserControl ça ne marche pas. C'est un bug WPF, c'est sûr. Je l'accepte.
Alors j'essaye tout simplement de sérialiser/désérialiser la richtextbox qui se trouve à l'intérieur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 string XAMLCode = XamlWriter.Save(RTB); StringReader XAMLstringReader = new StringReader(XAMLcode); XmlReader XMLReader = XmlReader.Create(XAMLstringReader); RichTextBox newRTBfromXAML = (System.Windows.Controls.RichTextBox)XamlReader.Load(XMLReader);
Eh ben, lors que je recolle mon UserControl sur mon canvas avec cette nouvellement créée richtextbox je remarque amèrement que cette procédure ne garde que les modifs effectuées en design-time (dans XAML) sur la richtextbox (RTB).
Les modifs que je fais lors de l'exécution,
le texte, le background, le border etc., sont toutes perdues.
Ce qui est très bizarre:
lors que je regarde en debug mode, dans la fenêtres des espions, les propriétés de ma nouvellement créée richtextbox, elles sont celles que j'avais assignées lors de l'EXECUTION !!! Le texte que j'avais saisi est bien là dans le flowDocument, la couleur du background est bien celle que je lui avais assignée lors de l'exécution.
Mais pourtant, lors que je cole mon UserControl sur le canvas, la richtextbox affiche ses anciennes propriétés (celles du design-time). Mon texte est perdu, la couleur du background est partie.
C'est vraiment pénible.
Pour info:
Oui j'ai lu, et plusieurs fois, les limitations de sérialization XAML sur la page http://msdn.microsoft.com/en-us/library/ms754193.aspx
Et là d'ailleurs c'est marqué :
Alors forcément, cette histoire de sérialization/désérisalization doit marcher sur la richtextbox.Realistic Scenarios for Use of XAMLWriter.Save
While the limitations listed here are fairly substantial, there are still several appropriate scenarios for using Save for serialization.
Rich text and flow documents: Text and all element formatting and element containment within it is preserved in the output. This can be useful for mechanisms that approximate a clipboard functionality.
Sinon, quelqu'un sait à quoi il sert ?
Partager