如果您已经创建了一个元素并指定了属性,例如下面的 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" />
然后,您可以使用编辑器将此文件变形为持久样式。请注意,必须首先通过 WPF 的两遍布局系统运行目标框架元素才能使该技术发挥作用。
例如
文本框 t = new TextBox();
t.高度 = 20;
t.SaveElementStyleToFile("myfile.xml");
将不出于这个原因工作。缺少 Xaml Power Toys 和/或完整的 Xaml 解析器提供的便利,这可能会尽可能满足您的要求...