如何检查DataTemplate中的AlternationCount?

时间:2014-05-21 14:55:24

标签: c# wpf datagrid

对于我的DataGrid,我创建了一个DataTemplate

 <DataTemplate x:Key="MyDataTemplate">
     <Label>Test</Label>
  </DataTemplate>

DataTemplate将用于DataGridTemplateColumnDataGrid具有AlternationCount = 2属性。

我想检查AlternationCount中的当前DataTemplate,根据AlternationCount设置内容。我怎么能要求AlternationCount

更新1:

我用以下代码尝试了Sheridan的建议:

<Style x:Key="MyStyle" TargetType="Label">
  <Style.Triggers>
    <Trigger Property="ItemsControl.AlternationIndex" Value="0">
      <Setter Property="Background" Value="Red" />
    </Trigger>
    <Trigger Property="ItemsControl.AlternationIndex" Value="1">
      <Setter Property="Background" Value="Blue" />
    </Trigger>
  </Style.Triggers>
</Style>

在我的DataTemplate中使用此样式,如下所示:

<DataTemplate x:Key="MyDataTemplate">
  <Label x:Name="MyLabel" Style={StaticResource MyStyle}">Test</Label>
</DataTemplate>

但遗憾的是,只有红色背景出现。在我看来,AlternationIndex始终为0.我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

可以访问AlternationCount attached property,但我认为您确实需要AlternationIndex attached property。基本上,您可以在Trigger中访问XAML中此附加属性的值,如下所示:

<Style>
    <Style.Triggers>
        <Trigger Property="ItemsControl.AlternationIndex" Value="0">
            <Setter Property="Foreground" Value="Green" />
        </Trigger>
        <Trigger Property="ItemsControl.AlternationIndex" Value="1">
            <Setter Property="Foreground" Value="Red" />
        </Trigger>
    </Style.Triggers>
</Style>

更新&gt;&gt;&gt;

TargetType的{​​{1}}不应设置为Style。它应该设置为数据的容器,例如。一个ComboBoxItem,ListBoxItem等。在您的情况下,您应该将Label设置为Style TargetType

DataGridRow

如果您设置<Style TargetType="{x:Type DataGridRow}"> <Style.Triggers> <Trigger Property="ItemsControl.AlternationIndex" Value="0"> <Setter Property="Background" Value="Green" /> </Trigger> <Trigger Property="ItemsControl.AlternationIndex" Value="1"> <Setter Property="Background" Value="Red" /> </Trigger> </Style.Triggers> </Style> 的{​​{1}}值,请假设您将其称为x:Key,然后您可以将Style设置为RowStyle 1}}属性值:

Style

如果您没有设置DataGrid.RowStyle的{​​{1}}值,并且它在<DataGrid RowStyle="{StaticResource RowStyle}" ... /> 的范围内,则会隐式应用它。