WPF DataGrid:如何只设置第一行的样式?
WPF DataGrid: How do you set the style of the first row only?
我已尝试搜索答案,但已发布的问题 here 尚未得到解答。
我尝试了一些复杂的方法 XAML,但从未奏效。如果选择了第一行,下面的代码会使 all 行变灰。无论选择哪个行索引,我只需要将第一行变灰。
<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>
有人能帮忙吗?
谢谢。
您可以使用在所有 ItemsControls
上找到的 AlternationCount
属性(参考 )。
<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>
我已尝试搜索答案,但已发布的问题 here 尚未得到解答。
我尝试了一些复杂的方法 XAML,但从未奏效。如果选择了第一行,下面的代码会使 all 行变灰。无论选择哪个行索引,我只需要将第一行变灰。
<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>
有人能帮忙吗?
谢谢。
您可以使用在所有 ItemsControls
上找到的 AlternationCount
属性(参考
<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>