在 WPF DataGrid 中禁用第一行的第一列
Disable First Column of First Row in WPF DataGrid
有没有办法(使用样式和多触发器)始终禁用 WPF 控件中 DataGrid
第一行的第一列?这是一个模板化列,在编辑模式下显示组合框,在正常模式下显示文本框。我希望它永远不会进入编辑模式(仅此列)。该行中的其余列应该能够进入编辑模式。
是的,这是可能的(换句话说,你想禁用一个确定的单元格),但我更愿意使用 ValueConverter
或 CellTemplateSelector
来达到目标。
在下面的解决方案中有一个限制,您必须将 DataGrid
的 AlternationCount
属性 设置为 ItemsSource 中元素的数量。
这是一个获取行索引的"work around",因为DataGridRow
没有属性获取索引(只有一个方法GetIndex()
)。
<DataGrid ItemsSource="{Binding YourItemsCollection}" AutoGenerateColumns="false" AlternationCount="{Binding YourItemsCollection.Count}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="0"/>
<Condition Binding="{Binding AlternationIndex, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="0"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsEnabled" Value="False" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>
有没有办法(使用样式和多触发器)始终禁用 WPF 控件中 DataGrid
第一行的第一列?这是一个模板化列,在编辑模式下显示组合框,在正常模式下显示文本框。我希望它永远不会进入编辑模式(仅此列)。该行中的其余列应该能够进入编辑模式。
是的,这是可能的(换句话说,你想禁用一个确定的单元格),但我更愿意使用 ValueConverter
或 CellTemplateSelector
来达到目标。
在下面的解决方案中有一个限制,您必须将 DataGrid
的 AlternationCount
属性 设置为 ItemsSource 中元素的数量。
这是一个获取行索引的"work around",因为DataGridRow
没有属性获取索引(只有一个方法GetIndex()
)。
<DataGrid ItemsSource="{Binding YourItemsCollection}" AutoGenerateColumns="false" AlternationCount="{Binding YourItemsCollection.Count}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Column.DisplayIndex, RelativeSource={RelativeSource Self}}" Value="0"/>
<Condition Binding="{Binding AlternationIndex, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="0"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsEnabled" Value="False" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
</DataGrid>