提取正在运行的WPF应用程序的WPF内容模板
是否有一种方法可以提取承载在运行的WPF应用程序中的WPF控件的内容模板 就像我能够通过Snoop之类的工具挖掘任何WPF应用程序的可视化树一样,我希望能够提取内容模板 我已经问过谷歌了。但要么我的关键词完全错了,要么可能没有解决办法(我怀疑) 谁能给我一个提示吗提取正在运行的WPF应用程序的WPF内容模板,wpf,templates,runtime,extract,Wpf,Templates,Runtime,Extract,是否有一种方法可以提取承载在运行的WPF应用程序中的WPF控件的内容模板 就像我能够通过Snoop之类的工具挖掘任何WPF应用程序的可视化树一样,我希望能够提取内容模板 我已经问过谷歌了。但要么我的关键词完全错了,要么可能没有解决办法(我怀疑) 谁能给我一个提示吗 谢谢该模板是在Xaml中定义的,最终被定义为二进制Xaml(Baml),这将使反编译Xaml格式的模板变得更加困难(如果不是不可能的话)。此工具允许您查看正在运行的WPF树。只要您不同时使用VS调试应用程序 你觉得这种小扩展方法怎么样
谢谢该模板是在Xaml中定义的,最终被定义为二进制Xaml(Baml),这将使反编译Xaml格式的模板变得更加困难(如果不是不可能的话)。此工具允许您查看正在运行的WPF树。只要您不同时使用VS调试应用程序
你觉得这种小扩展方法怎么样
using XamlWriter = System.Windows.Markup.XamlWriter;
public static class FrameworkTemplateExtensions
{
/// <summary>
/// Returns properly-indented XAML representing the given template.
/// </summary>
public static string AsXaml(this FrameworkTemplate template)
{
if (template == null)
{
return null;
}
XmlWriterSettings xmlSettings = new XmlWriterSettings();
xmlSettings.Indent = true;
StringBuilder builder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(builder, xmlSettings))
{
XamlWriter.Save(template, writer);
}
return builder.ToString();
}
}
使用XamlWriter=System.Windows.Markup.XamlWriter;
公共静态类FrameworkTemplateExtensions
{
///
///返回表示给定模板的正确缩进XAML。
///
公共静态字符串AsXaml(此框架模板)
{
如果(模板==null)
{
返回null;
}
XmlWriterSettings=新的XmlWriterSettings();
xmlSettings.Indent=true;
StringBuilder=新的StringBuilder();
使用(XmlWriter=XmlWriter.Create(生成器,xmlSettings))
{
保存(模板,编写器);
}
返回builder.ToString();
}
}
Mhm。。没有料到将模板作为反射器是不可能的,例如,从BAML解析普通XAML没有太多问题。