任何提取底层Xaml的方法?

时间:2009-04-23 20:58:38

标签: wpf silverlight xaml runtime

无论如何都要从控件中提取底层xaml。

IE。我有一个名为fooBox的文本框。我可以在运行时从文本框中获取代表文本框的xaml吗?

3 个答案:

答案 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