/// <summary> /// Copies selected content to the clipboard /// </summary> public void Copy() { if (textBoxTemplated != null) { textBoxTemplated.Copy(); } else { textBox.Copy(); } }
/// <summary> /// This virtual method is called when ApplicationCommands.Copy command is executed. /// </summary> /// <param name="args"></param> protected virtual void OnExecutedCopy(ExecutedRoutedEventArgs args) { if (ClipboardCopyMode == DataGridClipboardCopyMode.None) { throw new NotSupportedException(SR.Get(SRID.ClipboardCopyMode_Disabled)); } args.Handled = true; // Supported default formats: Html, Text, UnicodeText and CSV Collection<string> formats = new Collection<string>(new string[] { DataFormats.Html, DataFormats.Text, DataFormats.UnicodeText, DataFormats.CommaSeparatedValue }); Dictionary<string, StringBuilder> dataGridStringBuilders = new Dictionary<string, StringBuilder>(formats.Count); foreach (string format in formats) { dataGridStringBuilders[format] = new StringBuilder(); } int minRowIndex; int maxRowIndex; int minColumnDisplayIndex; int maxColumnDisplayIndex; // Get the bounding box of the selected cells if (_selectedCells.GetSelectionRange(out minColumnDisplayIndex, out maxColumnDisplayIndex, out minRowIndex, out maxRowIndex)) { // Add column headers if enabled if (ClipboardCopyMode == DataGridClipboardCopyMode.IncludeHeader) { DataGridRowClipboardEventArgs preparingRowClipboardContentEventArgs = new DataGridRowClipboardEventArgs(null, minColumnDisplayIndex, maxColumnDisplayIndex, true /*IsColumnHeadersRow*/); OnCopyingRowClipboardContent(preparingRowClipboardContentEventArgs); foreach (string format in formats) { dataGridStringBuilders[format].Append(preparingRowClipboardContentEventArgs.FormatClipboardCellValues(format)); } } // Add each selected row for (int i = minRowIndex; i <= maxRowIndex; i++) { object row = Items[i]; // Row has a selecion if (_selectedCells.Intersects(i)) { DataGridRowClipboardEventArgs preparingRowClipboardContentEventArgs = new DataGridRowClipboardEventArgs(row, minColumnDisplayIndex, maxColumnDisplayIndex, false /*IsColumnHeadersRow*/, i); OnCopyingRowClipboardContent(preparingRowClipboardContentEventArgs); foreach (string format in formats) { dataGridStringBuilders[format].Append(preparingRowClipboardContentEventArgs.FormatClipboardCellValues(format)); } } } } ClipboardHelper.GetClipboardContentForHtml(dataGridStringBuilders[DataFormats.Html]); try { DataObject dataObject = new DataObject(); foreach (string format in formats) { dataObject.SetData(format, dataGridStringBuilders[format].ToString(), false /*autoConvert*/); } Clipboard.SetDataObject(dataObject); } catch (SecurityException) { // In partial trust we will have a security exception because clipboard operations require elevated permissions // Bug: Once the security team fix Clipboard.SetText - we can remove this catch // Temp: Use TextBox.Copy to have at least Text format in the clipboard TextBox textBox = new TextBox(); textBox.Text = dataGridStringBuilders[DataFormats.Text].ToString(); textBox.SelectAll(); textBox.Copy(); } }