【问题标题】:How to make DataGridColumn ReadOnly but with CaretVisible?如何使 DataGridColumn 只读但使用 CaretVisible?
【发布时间】:2015-03-16 20:06:01
【问题描述】:

有没有办法让 DataGrid 的列处于只读模式但插入符号可见?使用 IsReadOnlyCaretVisible 属性时类似于文本框? 如果设置 IsReadOnly 属性,则 Column 将被禁用,并且无法单击单元格。

<DataGrid ItemsSource="{Binding Customers}" AutoGenerateColumns="False">
         <DataGrid.Columns>
             <DataGridTextColumn Binding="{Binding Name}"></DataGridTextColumn>
             <DataGridTextColumn Binding="{Binding Income}" IsReadOnly="True"></DataGridTextColumn>
         </DataGrid.Columns>
</DataGrid>

【问题讨论】:

  • 也许你可以修改它的模板来实现一些东西,但我不确定这种方式。我现在唯一的解决方案是避免设置 IsReadOnly 属性并简单地阻止任何输入(来自键盘和剪贴板)。
  • @EugenePodskal 我有一个从 DataGridTextColumn 继承的自定义列,我没有设置列的 IsReadOnly 属性,我设置了内部文本框的 IsReadOnly 和 IsReadOnlyCaretVisible,但是有些情况像当您复制和粘贴时,或者当您选择列并按一个成功更改内容的数字时。我不知道还有什么要更改或需要拦截的事件以防止这种情况发生。
  • 哦,我在阅读问题时有点不专心。在这种情况下,您可以尝试已作为答案发布的基于模板的解决方案。
  • @EugenePodskal 是的,这很简单,不过我只需要重新考虑我的自定义列,以使用 Ganesh 解决方案。
  • 正如我在之前的评论中已经告诉你的那样——“你可以尝试已经发布的基于模板的解决方案作为答案”。很抱歉,当我浏览问题文本时首先误导了您。

标签: c# wpf datagrid


【解决方案1】:

您可以使用 TextBox 创建 DataGridTemplateColumn。参考下面的代码。

<DataGridTemplateColumn Header="Name">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Text="{Binding Name}" IsReadOnly="True" IsReadOnlyCaretVisible="True"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>                   
            </DataGridTemplateColumn>

【讨论】:

  • 啊,我明白了,所以不是从 DataGridTextColumn 继承,我需要从 DataGridTemplateColumn 继承?
猜你喜欢
  • 2016-06-22
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 2011-07-16
  • 2018-08-07
  • 2019-09-01
  • 2017-12-19
  • 2019-12-22
相关资源
最近更新 更多