2017-03-03 6 views
2

私のWPFアプリケーションでXAMLファイルに多数のDataGridを作成しています。XAMLから重複するDataTriggerコードを削除する

一般的に、私が作る各データグリッドは次のようになります。

<DataGrid x:Name="DamageTakenData" HorizontalAlignment="Left" VerticalAlignment="Top" Width="506" Height="172" Canvas.Left="30" Canvas.Top="228"> 
       <DataGrid.CellStyle> 
        <Style TargetType="{x:Type DataGridCell}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Row}" Value="1"> 
           <Setter Property="Foreground" Value="Red" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="2"> 
           <Setter Property="Foreground" Value="Orange" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="3"> 
           <Setter Property="Foreground" Value="Orange" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="4"> 
           <Setter Property="Foreground" Value="Green" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="5"> 
           <Setter Property="Foreground" Value="Green" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="6"> 
           <Setter Property="Foreground" Value="Green" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGrid.CellStyle> 
     </DataGrid> 

私は別のタブで約6またはそれらのDataGridの7、それらのそれぞれを持っています。各データグリッドにはどうすればDataGrid.CellStyleを指定するためのコードの重複を排除することについては行くだろう

<DataGrid x:Name="PlayerDeathData" HorizontalAlignment="Left" Margin="27,35,0,0" VerticalAlignment="Top" Height="155" Width="626" Grid.ColumnSpan="2"> 
       <DataGrid.CellStyle> 
        <Style TargetType="{x:Type DataGridCell}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Row}" Value="1"> 
           <Setter Property="Foreground" Value="Red" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="2"> 
           <Setter Property="Foreground" Value="Orange" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="3"> 
           <Setter Property="Foreground" Value="Orange" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="4"> 
           <Setter Property="Foreground" Value="Green" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="5"> 
           <Setter Property="Foreground" Value="Green" /> 
          </DataTrigger> 
          <DataTrigger Binding="{Binding Row}" Value="6"> 
           <Setter Property="Foreground" Value="Green" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </DataGrid.CellStyle> 
      </DataGrid> 

同じDataGrid.CellStyleを持っていますか?この質問を見て

試み

Prevent Duplicate Code In XAML、私は似たような試みました。

<Window.Resources> 
    <Style TargetType="{x:Type DataGridCell}" x:Key="DataGridStyle"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Row}" Value="1"> 
       <Setter Property="Foreground" Value="Red" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Row}" Value="2"> 
       <Setter Property="Foreground" Value="Orange" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Row}" Value="3"> 
       <Setter Property="Foreground" Value="Orange" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Row}" Value="4"> 
       <Setter Property="Foreground" Value="Green" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Row}" Value="5"> 
       <Setter Property="Foreground" Value="Green" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding Row}" Value="6"> 
       <Setter Property="Foreground" Value="Green" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

をそして、私はこのような静的リソースを使用します:私は、静的リソースに作ら

<DataGrid x:Name="DamageDealtData" HorizontalAlignment="Left" VerticalAlignment="Top" Width="506" Height="163" Canvas.Left="30" Canvas.Top="35"> 
       <DataGridCell Style="{StaticResource DataGridStyle}"/> 
      </DataGrid> 

をこのアプローチはどちらか動作しません。それは1つのDataGridCellだけを作成し、それをスタイリングしているようだからです。

どうすればいいですか?

答えて

2

リソースが正しくあり、間違って適用しているだけです。

それはこのように行われるべきである:

<DataGrid x:Name="DamageDealtData" HorizontalAlignment="Left" 
VerticalAlignment="Top" Width="506" Height="163" Canvas.Left="30" 
Canvas.Top="35" DataGrid.CellStyle="{StaticResource DataGridStyle}"> 
    ... 
</DataGrid> 

あなたは、単一のDataGridCellを作成し、作成したスタイルにそのスタイルを設定した<DataGridCell Style="{StaticResource DataGridStyle}"/>を使用した場合。 DataGrid.CellStyleを代わりに設定すると、そのスタイルがグリッドのすべてのセルに適用されます。

+0

ありがとうございました。それは働いた – Mantracker

+0

いつでも助けてうれしい! –

関連する問題