Как я могу получить фактический XAML из объекта шаблона в коде (или я могу)? - PullRequest
2 голосов
/ 15 апреля 2011

Не уверен, возможно ли это, но если у меня есть объект шаблона (переданный в переопределение OnApplyTemplate), есть ли способ проверить строковое представление XAML, из которого он состоит?Я знаю, что когда XAML шаблона скомпилирован, он на самом деле преобразуется в BAML, и я знаю, что к тому времени, когда код переходит в переопределение, он не переходит в фактические объекты, поэтому я спрашиваю.

На самом деле, если вы можете перейти от объекта шаблона к XAML, не могли бы вы теоретически перейти от любого объекта WPF к его представлению XAML?Однако я предпочел бы использовать только шаблон.

Это C # в .NET 4.0, а не Silverlight FWIW.

M

1 Ответ

7 голосов
/ 15 апреля 2011

Старый класс XamlWriter работает большую часть времени.Новые классы XAML в System.Xaml по какой-то причине выдают ошибку при попытке сериализации ControlTemplate в XAML.Я предлагаю вам не полагаться на какие-либо записи XAML в рабочем коде ...

var template = this.FindResource("MyTemplate") as ControlTemplate;

// The new XamlServices class throws an error. 
//string xaml = System.Xaml.XamlServices.Save(template);

// The old XamlWriter from the Markup namespace works (usually)
string xaml = System.Windows.Markup.XamlWriter.Save(template);

// Format the XAML so that it's readable.
string indentedXaml = XElement.Parse(xaml).ToString();

Console.WriteLine(indentedXaml);
...