0

シナリオ:

ログイベントを含む ObservableCollection があります。ログ イベントは、時刻、日付、重大度、メッセージなどから構成されます。ObservableCollection のコンテンツを表示するために、データ バインディングを備えた WPF データグリッドを使用しています。

問題:

エンドユーザーとして、任意の量のテキストを 1 行でマーク/選択して、クリップボードにコピーしたいと考えています。たとえば、Excel または HTML でレンダリングされたテーブルで可能なように、メッセージ列または行全体で単一の単語を選択したいと思います。

すでに試しました:

セルのテンプレートを読み取り専用のテキスト ボックスに変更しようとしました。これにより、セル全体または単一の単語をマークできるようになりましたが、行全体を選択してコピーすることはできなくなりました。「FlowDocument」コントロールの使用も検討しましたが、UI の主な機能は、コントロール全体を再描画せずに新しいログ メッセージが追加されることです。私の知る限り、データ バインディングのサポートがない FlowDocument ではこれは不可能です。

質問:

Excelまたはレンダリングされたhtmlテーブルで可能なように、任意のテキスト部分を選択してコピーできるWPFで(たとえば)ログイベントのリストを表示する方法は?

4

2 に答える 2

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()); 
}
于 2017-01-11T02:20:10.050 に答える