情景:
我有一个包含日志事件的ObservableCollection。日志事件包括例如时间,日期,严重程度和消息。我正在使用带有数据绑定的WPF数据网格来显示ObservableCollection的内容。
问题:
作为最终用户,我想在一行中标记/选择任意数量的文本并将其复制到剪贴板。举个例子,我想在消息列或整行中选择单个单词,就像在excel或html渲染表中一样。
已经尝试过:
我试图将单元格的模板更改为只读文本框,这样可以标记整个单元格或单个单词,但选择并复制整行不再有效。 我还考虑使用“FlowDocument”控件,但UI的一个主要功能是添加新的日志消息而不重新绘制整个控件。据我所知,FlowDocument也无法实现这一点,而FlowDocument也缺乏数据绑定支持。
问题:
如何在WPF中显示(例如)日志事件的列表,其中可以选择和复制任意文本部分,就像在Excel或渲染的html表中一样?
答案 0 :(得分:1)
可以试试这个属性:
<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>
答案 1 :(得分:1)
一次选择整行并复制到剪贴板
<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());
}