2009-04-23 5 views
2

Existe-t-il de toute façon d'extraire le xaml sous-jacent d'un contrôle.Un moyen d'extraire Xaml sous-jacent?

IE. J'ai une zone de texte nommée fooBox. Puis-je récupérer xaml à partir de la zone de texte lors de l'exécution qui représente la zone de texte?

Répondre

3

Cela vous montre le cycle de vie (du contrôle à XAML retour au contrôle). Comme vous pouvez le voir,

string s = XamlWriter.Save(value); 

est la partie intéressante que vous pourriez se soucier.

/// <summary> 
    /// Clones a given UIElement. Please note that any events, animations, etc 
    /// on the source item may not carry over to the cloned object. 
    /// </summary> 
    /// <param name="value">UIElement to clone.</param> 
    /// <returns>A shallow clone of the source element.</returns> 
    public static UIElement CloneUIElement(UIElement value) 
    { 
     if (value == null) 
     { 
      return null; 
     } 

     string s = XamlWriter.Save(value); 
     StringReader stringReader = new StringReader(s); 
     XmlReader xmlReader = XmlTextReader.Create(stringReader, new XmlReaderSettings()); 
     return (UIElement)XamlReader.Load(xmlReader); 
    } 
+0

Cela a fonctionné parfaitement. Et était très rapide aussi. Merci! – JRobbers

+1

Cela ne fonctionne que pour WPF; pas Silverlight. :( – Jason

1

Pour Silverlight, je suis tombé sur this blog post par Rob Relyea qui faisait référence à un Silverlight xaml serializer créé par David Poll. Bravo à David Poll. (Downloads Page).

Utilisation

UiXamlSerializer uxs = new UiXamlSerializer(); 
string text = uxs.Serialize(this.gridToSerialize); 
Questions connexes