wpf DataGrid 禁用除第一列以外的特定行的单元格编辑
wpf DataGrid disable cell edit for specific row except first column
我有一个通用 DataTable
的绑定,其中某些行可能包含问题,不应修改。似乎有一种非常简单的方法可以通过在 DataGrid_LoadingRow
中设置 IsEnabled
或在 XAML
中设置 Trigger
和 Binding
来实现。
但是,我还有一个“信息”列,其中有一个按钮,以便用户可以查看问题……将 IsEnabled 设置为 false 也会禁用我的按钮……
我已经尝试过:IsManipulationEnabled
但这没有效果。
我怎样才能做到这一点?唯一的方法是遍历 DataRowView
的 VisualTree
并为除第一个以外的所有单元格设置 IsEnabled
吗?
对于您的第一列,请使用此 Button
、
public class EnabledButton : Button
{
static EnabledButton()
{
UIElement.IsEnabledProperty.OverrideMetadata(typeof(EnabledButton),
new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.None,
UIElement.IsEnabledProperty.DefaultMetadata.PropertyChangedCallback,
new CoerceValueCallback(IsEnabledCoerceCallback)));
}
private static object IsEnabledCoerceCallback(DependencyObject d, object baseValue)
{
return (bool)baseValue;
}
}
用法:
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:EnabledButton IsEnabled="True" Content="Modify"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid.Columns>
这会覆盖 DataGridCell.IsEnabled
属性 的继承。
我有一个通用 DataTable
的绑定,其中某些行可能包含问题,不应修改。似乎有一种非常简单的方法可以通过在 DataGrid_LoadingRow
中设置 IsEnabled
或在 XAML
中设置 Trigger
和 Binding
来实现。
但是,我还有一个“信息”列,其中有一个按钮,以便用户可以查看问题……将 IsEnabled 设置为 false 也会禁用我的按钮……
我已经尝试过:IsManipulationEnabled
但这没有效果。
我怎样才能做到这一点?唯一的方法是遍历 DataRowView
的 VisualTree
并为除第一个以外的所有单元格设置 IsEnabled
吗?
对于您的第一列,请使用此 Button
、
public class EnabledButton : Button
{
static EnabledButton()
{
UIElement.IsEnabledProperty.OverrideMetadata(typeof(EnabledButton),
new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.None,
UIElement.IsEnabledProperty.DefaultMetadata.PropertyChangedCallback,
new CoerceValueCallback(IsEnabledCoerceCallback)));
}
private static object IsEnabledCoerceCallback(DependencyObject d, object baseValue)
{
return (bool)baseValue;
}
}
用法:
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:EnabledButton IsEnabled="True" Content="Modify"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
...
</DataGrid.Columns>
这会覆盖 DataGridCell.IsEnabled
属性 的继承。