WPF datagrid - 启用选择,禁用文本输入

时间:2011-04-29 10:07:22

标签: wpf datagrid edit datagridcell

我有一个C#WPF Datagrid,带有复选框列,超链接列和文本列。 我的DataGrid绑定到DataTable。列不是自动生成的,但我确实在代码中动态创建它们,因为事先不知道列数。 我想启用单元格中的文本(用于ctrl + c目的),但禁用编辑。我不希望文本被更改。 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:7)

一种可能是使用DataGridTemplateColumn:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox IsReadOnly="True" Text="{Binding YourProperty,Mode=OneWay}"/>                            
        </DataTemplate>                        
    </DataGridTemplateColumn.CellTemplate>                    
</DataGridTemplateColumn>

这也适用于Checkboxes,添加CheckBox,绑定其IsChecked并将TextBox用作设置为IsReadOnly的内容。

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding YourBooleanValue}">
                <TextBox IsReadOnly="True" Text="YourCopyableTextOrABindingToText"/>
            </CheckBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

如果要将复选框设置为只读,请将其Enabled-property设置为false。但是在这种情况下,您必须将TextBox声明为子,而不是将其声明为CheckBox的兄弟(使用网格或StackPanel)。

如果要为整个DataGrid创建只读数据,请使用:

<DataGrid IsReadOnly="True">

列也可以:

<DataGridTextColumn IsReadOnly="True">

如果要每行定义它,则必须使用DataGridTemplateColumn并绑定编辑控件的IsReadOnly-proeprty。

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBox IsReadOnly="{Binind YourReadOnlyProperty}" Text="{Binding YourProperty,Mode=OneWay}"/>
        </DataTemplate>                        
    </DataGridTemplateColumn.CellTemplate>                    
</DataGridTemplateColumn>

答案 1 :(得分:2)

如果您的用户通常一次复制整个单元格,您可以将DataGrid的SelectionUnit设置为Cell

如果他们复制单元格的某些部分,最好覆盖CellTemplate以显示标签为HCL推荐

答案 2 :(得分:-1)

我很确定如果将DataGridTextBoxColumn的IsReadOnly属性设置为true,您仍然可以选择并复制内容。