我需要将控件的道具(Height,Width,HorizontalAligment ..等)提取到风格。提取风格(Xaml处理工具)
你们知道有什么工具可以做到吗?
我已经试过的XAML电动工具(不错,但只处理XML像前属性的属性:无法识别) 又看了以上的Expression Blend ..没有在那里找到任何东西。
至少一些框架/ API的XAML的容易解析(发现的XAML工具包,但它在2010年仍留在CTP版。)
谢谢!
我需要将控件的道具(Height,Width,HorizontalAligment ..等)提取到风格。提取风格(Xaml处理工具)
你们知道有什么工具可以做到吗?
我已经试过的XAML电动工具(不错,但只处理XML像前属性的属性:无法识别) 又看了以上的Expression Blend ..没有在那里找到任何东西。
至少一些框架/ API的XAML的容易解析(发现的XAML工具包,但它在2010年仍留在CTP版。)
谢谢!
如果您创建了一个元素并指定了属性,如下面的Slider控件。
<Window x:Class="Styling.ExtractStyle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ViewTemplateSource" Height="300" Width="300">
<Window.Resources>
</Window.Resources>
<Grid Name="g1">
<Slider Name="mySlider" Height="100" VerticalAlignment="Center">
<Slider.Width>200</Slider.Width>
</Slider>
</Grid>
</Window>
您可以实现的扩展FrameworkElement的类...
public static class FrameworkElementExtensions
{
public static void SaveElementStyleToFile(this FrameworkElement element, string fileName)
{
if (element != null)
{
XmlWriterSettings settings = new XmlWriterSettings
{
Indent = true,
IndentChars = new string(' ', 4),
NewLineOnAttributes = true
};
StringBuilder strbuild = new StringBuilder();
XmlWriter xmlwrite = XmlWriter.Create(strbuild, settings);
if (xmlwrite != null)
{
XamlWriter.Save(element, xmlwrite);
}
File.WriteAllText(fileName, strbuild.ToString());
}
else
{
throw new Exception("Cannot serialize a null object");
}
}
}
,并调用扩展方法...
mySlider.SaveElementStyleToFile("mySliderStyle.xaml");
这将使你在一个XML文件捕获“硬编码”属性的应用程序的根目录。以下是它输出的内容...
<?xml version="1.0" encoding="utf-16"?>
<Slider
Name="mySlider"
Width="200"
Height="100"
VerticalAlignment="Center"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" />
然后,您可以使用编辑器将此文件变为持久样式。请注意,目标Framework元素必须首先通过WPF的两遍布局系统运行,以使此技术可用。
例如
文本框吨=新文本框(); t.Height = 20; t.SaveElementStyleToFile(“myfile.xml”);
将不是工作原因。由于Xaml Power Toys和/或一个完整的Xaml语法分析器所提供的便利性,这可能会尽可能地满足您的要求...
问题。解析Xaml只会给你本地设置的样式属性。已经由其他方法设置的属性,如WPF强制,或绑定,或者已经存在于对象图中的资源字典,或者甚至源自模板化的父级,都会丢失。那么你是否希望仅捕获已经在本地和声明性设置的属性?或者,您是否想要捕捉元素构建后的视觉外观? –
只是硬编码值 – Zapacila
您是否找到下面发布的答案是合适的? –