2

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

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

4

3 回答 3

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);
    }
于 2009-04-23T21:04:21.997 回答
1

对于 Silverlight,我遇到了 Rob Relyea 的这篇博客文章,其中提到了David Poll 创建的Silverlight xaml 序列化程序。对大卫·波尔表示极大的敬意。(下载页面)。

用法

UiXamlSerializer uxs = new UiXamlSerializer();
string text = uxs.Serialize(this.gridToSerialize);
于 2012-01-15T18:45:48.423 回答
0

是的 - Josh Smith 在他的 Mole 工具中执行此操作:http: //www.codeproject.com/KB/WPF/MoleForWPF.aspx

于 2009-04-23T21:03:09.783 回答