在WPF数据网格行或单元格中选择任意文本并复制它
场景:
我有一个包含日志事件的ObservableCollection。 日志事件由时间,日期,严重性和消息组成。 我正在使用带有数据绑定的WPF数据网格来显示ObservableCollection的内容。
问题:
作为最终用户,我想在一行中标记/选择任意数量的文本并将其复制到剪贴板。 举个例子,我想在消息列或整行中选择单个单词,就像在excel或html呈现的表格中可能的那样。
已经尝试过:
我试图将单元格的模板更改为只读文本框,这使得可以标记整个单元格或单个单词,但是然后选择并复制整行不再起作用。 我也考虑过使用“FlowDocument”控件,但UI的一个主要功能是添加新的日志消息而不重绘整个控件。 据我所知,这对FlowDocument来说是不可能的,它也缺乏数据绑定支持。
题:
如何显示WPF中的日志事件(例如)的列表,其中可以选择和复制任意文本部分,如在Excel或呈现的HTML表格中可能的那样?
可以试试这个属性:
<DataGrid SelectionUnit="Cell">
添加:
<DataGrid ItemsSource="{x:Static Fonts.SystemFontFamilies}" SelectionUnit="Cell" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Mode=OneWay}"/>
<DataGridTextColumn Binding="{Binding Baseline}"/>
<DataGridTextColumn Binding="{Binding LineSpacing}" Width="*"/>
</DataGrid.Columns>
</DataGrid>
按时选择整行并复制到剪贴板
<DataGrid ... SelectionUnit="FullRow" CopyingRowClipboardContent="dataPaths_CopyingRowClipboardContent">
电话
private void dataPaths_CopyingRowClipboardContent(object sender, DataGridRowClipboardEventArgs e)
{
IList<DataGridCellInfo> cells = (sender as DataGrid).SelectedCells;
foreach (DataGridCellInfo cell in cells)
e.ClipboardRowContent.Add(new DataGridClipboardCellContent(e.Item, cell.Column, null));
//or write out to a log
foreach (var row in e.ClipboardRowContent)
Console.WriteLine(row.Item.toString());
}
链接地址: http://www.djcxy.com/p/64731.html
上一篇: Select arbitrary text in a WPF datagrid row or cell and copy it