.net 何时使用XamlServices.Transform()?

.net 何时使用XamlServices.Transform()?,.net,xaml,.net,Xaml,我正在查看System.Xaml命名空间的MSDN文档,特别是XamlServices类。我想知道该方法的用例是什么 我没有什么反对的,我只是不认为这样做有用,我想知道我缺少了什么。转换需要一个XamlReader和一个XamlWriter 有两位开箱即用的作家和五位开箱即用的读者。当然,你可以创建自己的 因此,Transform方法允许您将一个读卡器和一个写卡器缝合在一起,以将xaml从一个地方传输/翻译/转换到另一个地方 松散Xaml很有用,但对我来说,最明显的两种情况是: 工作流定义和 U

我正在查看System.Xaml命名空间的MSDN文档,特别是XamlServices类。我想知道该方法的用例是什么


我没有什么反对的,我只是不认为这样做有用,我想知道我缺少了什么。

转换需要一个XamlReader和一个XamlWriter

有两位开箱即用的作家和五位开箱即用的读者。当然,你可以创建自己的

因此,Transform方法允许您将一个读卡器和一个写卡器缝合在一起,以将xaml从一个地方传输/翻译/转换到另一个地方

松散Xaml很有用,但对我来说,最明显的两种情况是:

  • 工作流定义和
  • UI的设计时/运行时生成器
  • 编辑

    这是来自转换方法的代码:

    public static void Transform(XamlReader xamlReader, XamlWriter xamlWriter, bool closeWriter)
    {
        if (xamlReader == null)
            throw new ArgumentNullException("xamlReader");
        if (xamlWriter == null)
            throw new ArgumentNullException("xamlWriter");
        IXamlLineInfo xamlLineInfo = xamlReader as IXamlLineInfo;
        IXamlLineInfoConsumer lineInfoConsumer = xamlWriter as IXamlLineInfoConsumer;
        bool flag = false;
        if (xamlLineInfo != null && xamlLineInfo.HasLineInfo && (lineInfoConsumer != null && lineInfoConsumer.ShouldProvideLineInfo))
            flag = true;
        while (xamlReader.Read())
        {
            if (flag && xamlLineInfo.LineNumber != 0)
                lineInfoConsumer.SetLineInfo(xamlLineInfo.LineNumber,xamlLineInfo.LinePosition);
            xamlWriter.WriteNode(xamlReader);
        }
    
        if (!closeWriter)
            return;
        xamlWriter.Close();
    }
    

    没有什么特别的,只是方便,这样你就不用自己写了。

    谢谢你这么久以来的评论!但由于没有单独的转换委托,您必须编写定制的XamlReader/XamlWriter实现,以完成您想要的任何转换。我不记得曾经遇到过这样的人(除了Rob Relyea几年前写的最初的XamlWriter性能替换,它没有“改变”任何东西)。如果只是将XamlReader提供给XamlWriter,那么该方法会有多复杂?为什么要费心把它添加到框架中呢?我想,希望他们在方法中加入一些智能缓冲。我将使用dotpeek查找,但我不希望fancyA添加任何内容作为转换方法的源代码以供参考