无论如何都要从控件中提取底层xaml。
IE。我有一个名为fooBox的文本框。我可以在运行时从文本框中获取代表文本框的xaml吗?
答案 0 :(得分: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);
}
答案 1 :(得分:1)
对于Silverlight,我遇到了Rob Relyea的this blog post,其中提到了David Poll创建的Silverlight xaml serializer。对David Poll的巨大荣誉。 (Downloads Page)。
用法
UiXamlSerializer uxs = new UiXamlSerializer();
string text = uxs.Serialize(this.gridToSerialize);
答案 2 :(得分:0)
是的 - 约什史密斯在他的鼹鼠工具中做到了这一点:http://www.codeproject.com/KB/WPF/MoleForWPF.aspx