2011-12-11 9 views
0

スタイルのコントロールの小道具(高さ、幅、水平方向など)を抽出する必要があります。スタイルへの宣言の抽出(Xaml処理ツール)

は、あなたたちはそれを行うための任意のツールを知っていますか?

私は(素敵な、だけで元の属性プロパティのようなXMLを処理します。認識されない)XAMLパワーツールを試してみました はまたどちらかが何かを見つけることができませんでした。.. Expression Blendの上に見えました。

少なくともいくつかのフレームワーク/ XAMLの簡単に解析するためのAPI(XAML Toolkitを見つけましたが、それは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> 

あなたはこれがあなたのXMLファイルを与えるだろう...の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 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の2パスレイアウトシステムで最初に実行する必要があります。例えば

のTextBox Tは=新しいテキストボックス()。 t.Height = 20; t.SaveElementStyleToFile( "myfile.xml");

は、その理由のためませ動作します。 Xaml Power Toysおよび/またはXamlパーサーが提供する利便性が不足している場合、これはユーザーの要件を満たすのと同じくらい近い可能性があります。

関連する問題