2012-02-20 2 views
1

私は、プロパティCellStyleを使用して、いくつかのDataGridColumnsにこのスタイルを適用する、次の1どのようにdatacontextのスタイルの要素を持っているのプロパティにスタイルをバインドするには?

<Style TargetType="DataGridCell" x:Key="ChangeAnimation" > 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=APropertyOfTheDataGridCellContext Bind DataContext}" Value="True" > 
      ... 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

のようなスタイルのトリガー内datatriggerを持っています。私が望むのは、スタイルのDataTriggerをセルのdatacontextのプロパティにバインドすることです。この方法で、各列に新しいStyleを作成する代わりに、このStyleをすべての必要な列で使用できるようになります。これは可能ですか?

ありがとうございます。

EDIT:DataGridのDataContextは、Rowsというプロパティを持つViewModelであり、RowsはBlinkというプロパティを持つCellsというプロパティを持っています。私はこのようなスタイル内のプロパティを参照したい:

<DataGrid.Resources> 
<Style TargetType="DataGridCell" x:Key="ChangeAnimation" > 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=Blink}" Value="True" > 
      ... 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
</DataGrid.Resources> 

これは私にエラーAWSを与える細胞1行を含有しないものですDataContextのDataGridResources。 DataGridCell DataContextをスタイルからどのように参照できますか?

答えて

5

削除するx:Key属性は、すべての列に適用されます。

<Style TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers>   
     <DataTrigger Binding="{Binding Path=DataContext.MyProperty,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridCell}}}" Value="True" />      
    </Style.Triggers> 
</Style> 

あなたは2つのデータグリッドを持っているなら、あなたは、変更したいデータグリッドのResourcesタグにこのスタイルを維持する必要があります...

RelativeSourceは私がのテンプレートを変更することを好む動作しない場合コラムここ

<WpfToolkit:DataGridTemplateColumn MinWidth="50" 
            MaxWidth="80" 
            Header="MyHeader" 
            IsReadOnly="True"> 
    <WpfToolkit:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <DataTemplate.Resources> 
       <DataTemplate x:Key="normalTemplate" /> 
       <DataTemplate x:Key="ChangeTempalte"> 
        <!-Your Controls-> 
       </DataTemplate> 
      </DataTemplate.Resources> 
      <ContentPresenter x:Name="chnagedField" 
           Content="{Binding}" 
           ContentTemplate="{StaticResource ResourceKey=normalTemplate}" /> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=MyProperty}" Value="True"> 
        <Setter TargetName="EditableField" Property="ContentTemplate" Value="{StaticResource ResourceKey=chnageTempalte}" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </WpfToolkit:DataGridTemplateColumn.CellTemplate> 
</WpfToolkit:DataGridTemplateColumn> 

ため

ライティングトリガー類似の挙動をachiveするためのトリガすることによって、列MyPropertyDataGridRowDataContextのプロパティなので、ネストされたプロパティのレベルをいつでも選択できます。特定の行と比較する...これは、必要なすべての列に対してこれを行う必要があります。

I役に立ったと思っています

+0

私が直面している問題は、DataGridリソース内のスタイルを宣言していることです。そこからDataGridCell DataContextのプロパティを参照できますか? –

+0

@SoMoS sometingしたいよこのように...編集した答え – Ankesh

+0

右のようなものですが、datacontextは祖先ではなく子供です。分かりますか? –