WPF DataGrid:如何仅设置第一行的样式?

时间:2017-01-12 19:50:42

标签: wpf xaml datagrid row selectedindex

我已尝试搜索答案,但发布的问题here尚未得到解答。

我尝试过一些复杂的XAML,但它从来没有奏效过。如果选择了第一行,则下面的代码将灰显所有行。无论选择哪个行索引,我都只需要将第一行灰显。

<TextBlock.Style>
    <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="FontStyle" Value="Normal"/>
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding Path=SelectedIndex, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}}}" Value="0"/>
                </MultiDataTrigger.Conditions>
                <Setter Property="Foreground" Value="Gray"/>
                <Setter Property="FontStyle" Value="Italic"/>
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
</TextBlock.Style>

有人能帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用AlternationCount上的ItemsControls属性(参考ListBox)。

<DataGrid ItemsSource="{Binding Items}"
          AlternationCount="2147483647"
          ... 
          >
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex" Value="0">
                    <Setter Property="Foreground" Value="Gray"/>
                    <Setter Property="FontStyle" Value="Italic"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.ItemContainerStyle>
    ...
</DataGrid>

修改

<DataGrid ItemsSource="{Binding Items}"
          AlternationCount="2"
          VirtualizingStackPanel.IsVirtualizing="False">
          ... 
          >
    <DataGrid.ItemContainerStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                    <Setter Property="Background" Value="Gray"/>
                </Trigger>
                <DataTrigger
                    Binding="{Binding RelativeSource={RelativeSource Mode=PreviousData}}"
                    Value="{x:Null}">
                    <Setter Property="Foreground" Value="Gray"/>
                    <Setter Property="FontStyle" Value="Italic"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.ItemContainerStyle>
    ...
</DataGrid>