2012-03-14 29 views
1

私はこのDataGridを持っています。無効な動作(xaml)を変更したいです。 テンプレートのこの小さな部分を変更したいと思います。それが不可能な場合はWPFでコントロールテンプレートを派生(展開)する

は、私が使用することを念頭にいけない:

<Setter Property="OverridesDefaultStyle" Value="True"/> 

をそして、私のコントロールの全体XAML(テンプレート)を交換するには、しかし、私はペーストをコピーして変更する場所を助けるために、完全なテンプレートが必要です使用不可の外観。

誰でも手伝ってもらえますか?

+1

あなたは正確に達成したいことは何ですか? WPF DataGridに新しいテンプレートを適用し、その上に 'DataGrid'の現在のコントロールテンプレートを上書きしたいとしますか? –

+0

は、同じテンプレートを使用するためにのみ、IsEnabledフォアグラウンドを灰色から緑色に変更します(この部分をオーバーライドします)。 – Programer

答えて

2

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> 

+0

@meyou:Ok、完全なテンプレートを与えるために私の答えを編集しました。 –

+0

そのような作業は不要です。MSDNのすべてのテンプレートを入手できます。http://stackoverflow.com/questions/1559261/control-template-for-existing-controls-in-wpf –

+0

@ H.Bを参照してください。ああ...私は知らなかった。間違いなく簡単:) –

0

コントロールの無効な動作を定義するには、コントロールテンプレートで無効なビジュアル状態を変更する必要があります。

+0

私はそれを見ていない...正しいここに投稿されたものですか? http://social.msdn.microsoft.com/Forums/en/wpf/thread/8e6f3c70-f65f-4152-9469-9ae3e9239126もしそうなら、あなたが言った部分はどこですか? – Programer

関連する問題