在datagrid中为第一行设置手形光标

时间:2018-04-10 17:43:08

标签: c# .net wpf

我有DataGrid:

<DataGrid x:Name="dgNames">
<DataGrid.Columns>
<DataGridTemplateColumn x:Name="tcContent" >
     <DataGridTemplateColumn.HeaderTemplate>
          <DataTemplate>
               <TextBlock VerticalAlignment="Top" Text="Content"/>
          </DataTemplate>
      </DataGridTemplateColumn.HeaderTemplate>
      <DataGridTemplateColumn.CellTemplate>
           <DataTemplate>
                <TextBlock Text="{Binding Path=Text}" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" />
            </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>           
   </DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>

如何仅为第一行设置样式(手形光标)?

1 个答案:

答案 0 :(得分:2)

您可以使用Converter获取Row索引,然后在DataTrigger中基于该索引设置光标:

<Window ...>
<Window.Resources>
    <local:RowIndexConverter x:Key="RowIndexConverter"/>
</Window.Resources>
<Grid>
    <DataGrid x:Name="dgNames" ItemsSource="{Binding DgCollection}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn x:Name="tcContent" >
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock  VerticalAlignment="Top" Text="Content"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Path=Text}"  VerticalAlignment="Center" TextTrimming="CharacterEllipsis" >
                            <TextBlock.Style>
                                <Style TargetType="TextBlock">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
                    AncestorType={x:Type DataGridRow}},
                    Converter={StaticResource RowIndexConverter}}"
                                                     Value="0">
                                            <Setter Property="Cursor" Value="Hand"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                        </TextBlock>

                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>
</Window>

RowIndexConverter返回当前的Row索引:

public class RowIndexConverter :  IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        return (value as DataGridRow).GetIndex();
    }

    public object ConvertBack(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

请注意,DgCollection是一个简单的ObservableCollection