2011-12-11 31 views
0

我需要将控件的道具(Height,Width,Horizo​​ntalAligment ..等)提取到风格。提取风格(Xaml处理工具)

你们知道有什么工具可以做到吗?

我已经试过的XAML电动工具(不错,但只处理XML像前属性的属性:无法识别) 又看了以上的Expression Blend ..没有在那里找到任何东西。

至少一些框架/ API的XAML的容易解析(发现的XAML工具包,但它在2010年仍留在CTP版。)

谢谢!

+0

问题。解析Xaml只会给你本地设置的样式属性。已经由其他方法设置的属性,如WPF强制,或绑定,或者已经存在于对象图中的资源字典,或者甚至源自模板化的父级,都会丢失。那么你是否希望仅捕获已经在本地和声明性设置的属性?或者,您是否想要捕捉元素构建后的视觉外观? –

+0

只是硬编码值 – Zapacila

+0

您是否找到下面发布的答案是合适的? –

回答

0

如果您创建了一个元素并指定了属性,如下面的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语法分析器所提供的便利性,这可能会尽可能地满足您的要求...