WPF 数据网格 - 启用选择、禁用文本输入
我有一个 C# WPF 数据网格,带有复选框列、超链接列和文本列。 我的 DataGrid 绑定到 DataTable。这些列不是自动生成的,但我确实在代码中动态创建它们,因为事先不知道列数。 我想允许选择单元格中的文本(用于 ctrl+c 目的)但禁用编辑。我不想更改文本。 有人可以帮忙吗?
I have a C# WPF Datagrid, with a checkbox column, hyperlink columns and text columns.
My DataGrid is bound to a DataTable. The columns are not auto generated, but I do create them in code dynamically, since the number of columns is not known in advance.
I would like to enable the text in the cells to be selected (for ctrl+c purpose) but yet disable editing. I don't want the text to be changed.
Anyone can help?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一种可能是使用 DataGridTemplateColumn:
这也适用于复选框,添加一个复选框,绑定其 IsChecked 并使用设置为 IsReadOnly 的 TextBox 作为内容。
如果您希望该复选框为只读,请将其 Enabled 属性设置为 false。但是,在这种情况下,您必须将 TextBox 声明为 CheckBox 的同级(使用网格或 StackPanel),而不是子级。
如果要使整个 DataGrid 的数据只读,请使用:
这也适用于列:
如果要按行定义它,则必须使用 DataGridTemplateColumn 并绑定 IsReadOnly 属性编辑控件。
One possibility is probably be to use a DataGridTemplateColumn:
This works also with Checkboxes, add a CheckBox, Bind its IsChecked and use as the content a TextBox that is set to IsReadOnly.
If you want to have the checkbox readonly, set its Enabled-property to false. However in this case, you have to declare the TextBox not as a child but as a sibling of the CheckBox (use a grid or a StackPanel) for this.
If you want to make data readonly for the whole DataGrid, use:
THis is also possible for columns:
If you want to define it per row, you have to use
DataGridTemplateColumn
s and bind the IsReadOnly-proeprty of the edit-control.如果您的用户通常一次复制整个单元格,您可以将 DataGrid 的
SelectionUnit
设置为 Cell如果他们复制单元格的部分内容,您最好按照 HCL 的建议覆盖 CellTemplate 以显示标签
If your users usually copy an entire cell at once you can set the DataGrid's
SelectionUnit
to CellIf they copy sections of a cell you're better off overwriting the CellTemplate to display a Label as HCL recommended
我相当确定,如果将 DataGridTextBoxColumn 的 IsReadOnly 属性设置为 true,您仍然可以选择并复制内容。
I'm fairly sure that if you set the DataGridTextBoxColumn's IsReadOnly property to true, you'll still be able to select and copy the contents.