2010-12-12 6 views
4

Я просматриваю документацию MSDN для пространства имен System.Xaml и, в частности, класса XamlServices. Мне интересно, какой вариант использования для метода XamlServices.Transform был бы?Когда вы используете XamlServices.Transform()?

У меня нет ничего против этого, я просто не вижу случая, когда это было бы полезно, и мне интересно, чего мне не хватает.

ответ

1

Преобразование принимает XamlReader и XamlWriter.

Есть два изготовителя готовых книг, и есть пять читателей из коробки. Конечно, вы можете создавать свои собственные.

Таким образом, метод Transform позволяет вам сшивать одного из читателей и одного из авторов вместе для передачи/перевода/преобразования xaml из одного места в другое.

Есть несколько сценариев, когда рыхлый Xaml полезно, но мне наиболее очевидные два являются:

  1. определения рабочего процесса и
  2. 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(); 
} 

Ничего необычного, но просто удобного, поэтому вам не нужно писать это самостоятельно.

+0

Спасибо за комментарии после всего этого времени! Но поскольку нет отдельного делегата преобразования, вам придется писать собственные реализации XamlReader/XamlWriter, которые делали любые преобразования, которые вы хотели. Я не помню, чтобы когда-либо сталкивался с тем, кто сделал это (кроме оригинальной замены производительности XamlWriter, которую писал Rob Relyea много лет назад, и он ничего не «трансформировал»). И если он просто кормит XamlReader XamlWriter, насколько сложным может быть этот метод? Зачем добавлять его в рамки? –

+0

Я думаю, и надеемся, что они положили некоторую интеллектуальную буферизацию в методе. Я буду использовать dotpeek, чтобы узнать, но я не ожидаю ничего фантазии –

+0

Добавлен источник метода Transform для справки –

Смежные вопросы