Преобразование принимает XamlReader и XamlWriter.
Есть два изготовителя готовых книг, и есть пять читателей из коробки. Конечно, вы можете создавать свои собственные.
Таким образом, метод Transform позволяет вам сшивать одного из читателей и одного из авторов вместе для передачи/перевода/преобразования xaml из одного места в другое.
Есть несколько сценариев, когда рыхлый Xaml полезно, но мне наиболее очевидные два являются:
- определения рабочего процесса и
- Design времени/время выполнения генераторы UI
РЕДАКТИРОВАТЬ
Это код из метода Transform:
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, которые делали любые преобразования, которые вы хотели. Я не помню, чтобы когда-либо сталкивался с тем, кто сделал это (кроме оригинальной замены производительности XamlWriter, которую писал Rob Relyea много лет назад, и он ничего не «трансформировал»). И если он просто кормит XamlReader XamlWriter, насколько сложным может быть этот метод? Зачем добавлять его в рамки? –
Я думаю, и надеемся, что они положили некоторую интеллектуальную буферизацию в методе. Я буду использовать dotpeek, чтобы узнать, но я не ожидаю ничего фантазии –
Добавлен источник метода Transform для справки –