【发布时间】:2019-04-16 20:35:12
【问题描述】:
有没有办法(使用样式和多触发器)始终禁用 WPF 控件中 DataGrid 第一行的第一列?这是一个模板列,在编辑模式下显示组合框,在正常模式下显示文本框。我希望它永远不会进入编辑模式(仅此列)。该行中的其余列应该能够进入编辑模式。
【问题讨论】:
-
如果您能发布相关代码,那就太好了。请参阅MCVE。
标签: c# wpf datagrid wpfdatagrid
有没有办法(使用样式和多触发器)始终禁用 WPF 控件中 DataGrid 第一行的第一列?这是一个模板列,在编辑模式下显示组合框,在正常模式下显示文本框。我希望它永远不会进入编辑模式(仅此列)。该行中的其余列应该能够进入编辑模式。
【问题讨论】:
标签: c# wpf datagrid wpfdatagrid
是的,这是可能的(换句话说,您想禁用特定的单元格),但我更愿意使用ValueConverter 或CellTemplateSelector 来达到目标。
在下面的解决方案中有一个限制,您必须将 DataGrid 的 AlternationCount 属性设置为 ItemsSource 中元素的数量。
这是获取行索引的“解决方法”,因为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>
【讨论】:
Style.Triggers?