2009-04-23 2 views
2

Есть ли все-таки, чтобы извлечь базовый элемент xaml из элемента управления.Любой способ извлечь базовый Xaml?

IE. У меня есть текстовое поле с именем fooBox. Можно ли вернуть xaml из текстового поля во время выполнения, представляющее текстовое поле?

ответ

3

Это показывает полный жизненный цикл (от управления к XAML обратно управления). Как вы можете видеть,

string s = XamlWriter.Save(value); 

интересная часть, которую вы могли бы заботиться о.

/// <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

Это работало безупречно. И тоже очень быстро. Благодаря! – JRobbers

+1

Это работает только для WPF; а не Silverlight. :( – Jason

1

Для Silverlight, я натыкался this blog post Роб Релайея, который ссылается на Silverlight xaml serializer созданный Дэвидом Poll. Огромное удовольствие Дэвиду Голливу. (Downloads Page).

Использование

UiXamlSerializer uxs = new UiXamlSerializer(); 
string text = uxs.Serialize(this.gridToSerialize); 
Смежные вопросы