2017-03-03 79 views
2

我在XAML文件的WPF应用程序中创建了很多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中具有相同的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 Style="{StaticResource DataGridStyle}"/>你创建一个单一DataGridCell其样式设置为您创建的风格。而是通过设置DataGrid.CellStyle,将该样式应用于网格的所有单元格。

+0

嘿非常感谢!它的工作 – Mantracker

+0

总是乐于帮助! –