C# 在WPF数据网格的新行中隐藏单元格
我有一个WPF Datagrid,它有一个模板列,定义如下:C# 在WPF数据网格的新行中隐藏单元格,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个WPF Datagrid,它有一个模板列,定义如下: <DataGridTemplateColumn x:Name="ciDelete" Header="Delete"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button x:Name="btnDelete" HorizontalAlignment="Center" Margin
<DataGridTemplateColumn x:Name="ciDelete" Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btnDelete" HorizontalAlignment="Center" Margin="0" Click="btnDelete_Click" Tag="{Binding Path=ciID}" VerticalAlignment="Center">
<Image Source="Resources/16x16/delete.png" Stretch="Fill" />
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这显示和工程伟大。但是,该按钮显示在新项目的行中(如下所示)。因为这是一个删除按钮,所以我不希望它显示在“newitem”行上
我看过一篇关于设计新行样式的文章,不过这似乎有点极端。我很好奇是否有更简单的方法只隐藏“新行”上的按钮。谢谢您的帮助。如果是我,我会编写一个快速转换器,以确定DataGridRow的datacontext是否为NewItemPlaceholder:
public class IsNamedObjectVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value.GetType().Name == "NamedObject")
{
return Visibility.Hidden;
}
else
{
return Visibility.Visible;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后,我会将RelativeSource绑定添加到Delete按钮可见性:
<DataGridTemplateColumn x:Name="ciDelete" Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="btnDelete" HorizontalAlignment="Center" Margin="0" Click="btnDelete_Click" Tag="{Binding Path=ciID}" VerticalAlignment="Center"
Visibility="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridRow}, Path=DataContext, Converter={StaticResource IsNamedObjectVisibilityConverter}}">
<Image Source="Resources/16x16/delete.png" Stretch="Fill" />
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这可能是最好的办法,也可能不是,但它应该奏效
我希望这有帮助
编辑:我希望很明显,为了简洁起见,我跳过了创建上述转换器实例的部分。本例假设您有一个按类的确切名称命名的转换器实例。可能很明显,但值得一提。:) 这是否意味着你想保留新的一排?如果您不想要新行,您可以始终在DataGrid上
CanUserAddRows=“False”
。是的,我希望用户能够添加新行,我只是不希望新行模板上的“删除”按钮可见。