要素を作成し、以下の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パーサーが提供する利便性が不足している場合、これはユーザーの要件を満たすのと同じくらい近い可能性があります。
質問。 Xamlを解析すると、ローカルに設定されているスタイルプロパティのみが表示されます。 WPF強制やバインドなどの他のメソッドによって設定されたプロパティ、またはオブジェクトグラフに既に存在するリソースディクショナリ、またはテンプレート化された親から派生したリソースディクショナリからのプロパティは存在しません。ローカルで宣言的に設定されているプロパティだけをキャプチャしたいのですか?または、構成後に要素の外観をキャプチャしようとしていますか? –
ハードコードされた値だけ – Zapacila
あなたは以下の回答が適切であることを確認しましたか? –