【问题标题】:Disable First Column of First Row in WPF DataGrid禁用 WPF DataGrid 中第一行的第一列
【发布时间】:2019-04-16 20:35:12
【问题描述】:

有没有办法(使用样式和多触发器)始终禁用 WPF 控件中 DataGrid 第一行的第一列?这是一个模板列,在编辑模式下显示组合框,在正常模式下显示文本框。我希望它永远不会进入编辑模式(仅此列)。该行中的其余列应该能够进入编辑模式。

【问题讨论】:

  • 如果您能发布相关代码,那就太好了。请参阅MCVE。

标签: c# wpf datagrid wpfdatagrid


【解决方案1】:

是的,这是可能的(换句话说,您想禁用特定的单元格),但我更愿意使用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>

【讨论】:

  • 您好,谢谢,但在我的情况下,这不起作用,因为样式的目标是 DataGridCell。正如我在问题中解释的那样,在我的情况下,数据网格在编辑模板中有带有组合框的模板列。我希望禁用第一行的第一个单元格,以便它根本不会进入编辑模式。其余单元格可以进入编辑模式。
  • 您是否尝试过应用已发布的解决方案,即复制Style.Triggers?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 2017-02-17
  • 2011-01-10
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
相关资源
最近更新 更多