EDIT:デフォルトのコントロールテンプレートはすべてMSDNで利用可能であることが指摘されていますが、これは以下の点で重要ですが、ここではその点について説明します。
コントロールのインスタンスを指定すると、System.Windows.Markup.XamlWriter
クラスを使用してコントロールテンプレートのマークアップをシリアル化することができます。
コントロールテンプレートを取得するには、次のコントロールテンプレートの使用(トリガなどを含む)完全なダンプを取得するには
string markup = System.Windows.Markup.XamlWriter.Save(control.Template);
を。
StringBuilder markupBuilder = new StringBuilder();
XmlWriter writer = XmlWriter.Create(markupBuilder);
System.Windows.Markup.XamlDesignerSerializationManager manager =
new System.Windows.Markup.XamlDesignerSerializationManager(writer);
manager.XamlWriterMode = System.Windows.Markup.XamlWriterMode.Value;
// data grid named dataGrid1
var template = dataGrid1.Template;
System.Windows.Markup.XamlWriter.Save(dataGrid1.Template, manager);
string markup = markupBuilder.ToString();
あなたはそれが無効になっていたときに、データグリッドのフォアグラウンドの色を変更するために探している場合、あなたはむしろテンプレート全体を置き換えるよりも、トリガーと一緒にスタイルを使用することができるはずです。データグリッドが無効になっている場合、緑色に各列ヘッダーとデータ行のセルの前景を設定し、データグリッドのリソースコレクションに上記2つのスタイルを追加
<DataGrid>
<DataGrid.Resources>
<Style
TargetType="{x:Type DataGridColumnHeader}">
<Style.Triggers>
<DataTrigger
Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
Value="False">
<Setter
Property="Foreground"
Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style
TargetType="{x:Type DataGridCell}">
<Style.Triggers>
<DataTrigger
Binding="{Binding IsEnabled, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
Value="False">
<Setter
Property="Foreground"
Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<!-- Column Definitions -->
</DataGrid>
。
あなたは正確に達成したいことは何ですか? WPF DataGridに新しいテンプレートを適用し、その上に 'DataGrid'の現在のコントロールテンプレートを上書きしたいとしますか? –
は、同じテンプレートを使用するためにのみ、IsEnabledフォアグラウンドを灰色から緑色に変更します(この部分をオーバーライドします)。 – Programer