c# – 隐藏WPF Datagrid中新行的单元格

前端之家收集整理的这篇文章主要介绍了c# – 隐藏WPF Datagrid中新行的单元格前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 WPF Datagrid,它有一个模板列,如下所示:
  1. <DataGridTemplateColumn x:Name="ciDelete" Header="Delete">
  2. <DataGridTemplateColumn.CellTemplate>
  3. <DataTemplate>
  4. <Button x:Name="btnDelete" HorizontalAlignment="Center" Margin="0" Click="btnDelete_Click" Tag="{Binding Path=ciID}" VerticalAlignment="Center">
  5. <Image Source="Resources/16x16/delete.png" Stretch="Fill" />
  6. </Button>
  7. </DataTemplate>
  8. </DataGridTemplateColumn.CellTemplate>
  9. </DataGridTemplateColumn>

显示并且效果很好.但是,按钮会在行中显示新项目(如下所示).由于这是一个删除按钮,我不希望它显示在“新项目”行上.

我看过this关于造型新行的文章,但这看起来有点极端.我很好奇是否有一个更简单的方法只隐藏“新行”上的按钮.谢谢您的帮助.

解决方法

如果是我,我会写一个快速转换器来确定DataGridRow的datacontext是否是NewItemPlaceholder:
  1. public class IsNamedObjectVisibilityConverter : IValueConverter
  2. {
  3.  
  4. public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
  5. {
  6. if (value.GetType().Name == "NamedObject")
  7. {
  8. return Visibility.Hidden;
  9. }
  10. else
  11. {
  12. return Visibility.Visible;
  13. }
  14.  
  15. }
  16.  
  17. public object ConvertBack(object value,System.Globalization.CultureInfo culture)
  18. {
  19. throw new NotImplementedException();
  20. }
  21.  
  22. }

然后我将一个RelativeSource绑定添加删除按钮可见性:

  1. <DataGridTemplateColumn x:Name="ciDelete" Header="Delete">
  2. <DataGridTemplateColumn.CellTemplate>
  3. <DataTemplate>
  4. <Button x:Name="btnDelete" HorizontalAlignment="Center" Margin="0" Click="btnDelete_Click" Tag="{Binding Path=ciID}" VerticalAlignment="Center"
  5. Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGridRow},Path=DataContext,Converter={StaticResource IsNamedObjectVisibilityConverter}}">
  6. <Image Source="Resources/16x16/delete.png" Stretch="Fill" />
  7. </Button>
  8. </DataTemplate>
  9. </DataGridTemplateColumn.CellTemplate>
  10. </DataGridTemplateColumn>

这可能是也可能不是最好的方法,但应该有效.

我希望这有帮助.

编辑:我希望很明显,为了简洁起见,我跳过了创建所述转换器实例的部分.此示例假定您具有类的确切名称的Converter实例.可能很明显,但值得一提.

猜你在找的C#相关文章