private void SetUpInputHooks() { IKeyboardInputSink sink; new UIPermission(PermissionState.Unrestricted).Assert(); //BlessedAssert try { _inputPostFilter = new HwndWrapperHook(BrowserInteropHelper.PostFilterInput); HwndSource hwndSource = base.HwndSourceWindow; hwndSource.HwndWrapper.AddHookLast(_inputPostFilter); sink = (IKeyboardInputSink)hwndSource; } finally { UIPermission.RevertAll(); } new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert(); //BlessedAssert try { Debug.Assert(sink.KeyboardInputSite == null); sink.KeyboardInputSite = new KeyInputSite(new SecurityCriticalData <IKeyboardInputSink>(sink)); } finally { SecurityPermission.RevertAll(); } }
/// <summary> /// Kopiuje pojedynczą komórkę do schowka. /// </summary> public void CopyCellContentToClipboard() { DataGridCellInfo cellInfo; DataGridColumn currentColumn = null; object currentItem = null; string format = DataFormats.UnicodeText; if (this.CurrentCell != null) { cellInfo = this.CurrentCell; } else if (this.SelectedCells.Count > 0) { cellInfo = this.SelectedCells[0]; } currentColumn = cellInfo.Column; if (currentColumn == null) { if (this.CurrentCell != null && this.CurrentCell.Column != null) { currentColumn = this.CurrentCell.Column; } else if (this.SelectedCells.Count > 0) { currentColumn = this.SelectedCells[0].Column; } } if (currentColumn == null) { return; } if (cellInfo.Item != null) { currentItem = cellInfo.Item; } else if (this.CurrentItem != null) { currentItem = this.CurrentItem; } else if (this.SelectedCells.Count > 0 && this.SelectedCells[0].Item != null) { currentItem = this.SelectedCells[0].Item; } if (currentItem == null) { return; } var value = currentColumn.OnCopyingCellClipboardContent(currentItem); if (value == null || value == DBNull.Value) { value = ""; } StringBuilder sb = new StringBuilder(); DataGridBoldClipboardHelper.FormatPlainText(value, sb, format); DataObject dataObject; bool hasPerms = SecurityHelper.CallerHasAllClipboardPermission() && SecurityHelper.CallerHasSerializationPermission(); // Copy unconditionally in full trust. // Only copy in partial trust if user initiated. if (hasPerms) { (new UIPermission(UIPermissionClipboard.AllClipboard)).Assert(); try { dataObject = new DataObject(); } finally { UIPermission.RevertAssert(); } dataObject.SetData(format, sb.ToString(), false /*autoConvert*/); // This assert is there for an OLE Callback to register CSV type for the clipboard (new SecurityPermission(SecurityPermissionFlag.SerializationFormatter | SecurityPermissionFlag.UnmanagedCode)).Assert(); try { if (dataObject != null) { Clipboard.SetDataObject(dataObject, true /* Copy */); } } finally { SecurityPermission.RevertAll(); } } }
private void OnExecutedCopyInternal(ExecutedRoutedEventArgs args) { if (ClipboardCopyMode == DataGridClipboardCopyMode.None) { throw new NotSupportedException("Cannot perform copy if ClipboardCopyMode is None."); } 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 (this.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 (this.SelectedCellsIntersects(i)) { DataGridRowClipboardEventArgs preparingRowClipboardContentEventArgs = (DataGridRowClipboardEventArgs)CONSTRUCTORINFO_DATAGRIDROWCLIPBOARDEVENTARGS.Invoke( new object[] { row, minColumnDisplayIndex, maxColumnDisplayIndex, false /*IsColumnHeadersRow*/, i }); OnCopyingRowClipboardContent(preparingRowClipboardContentEventArgs); foreach (string format in formats) { dataGridStringBuilders[format].Append(preparingRowClipboardContentEventArgs.FormatClipboardCellValues(format)); } } } } DataGridBoldClipboardHelper.GetClipboardContentForHtml(dataGridStringBuilders[DataFormats.Html]); DataObject dataObject; bool hasPerms = SecurityHelper.CallerHasAllClipboardPermission() && SecurityHelper.CallerHasSerializationPermission(); // Copy unconditionally in full trust. // Only copy in partial trust if user initiated. if (hasPerms || args.GetUserInitiated()) { (new UIPermission(UIPermissionClipboard.AllClipboard)).Assert(); try { dataObject = new DataObject(); } finally { UIPermission.RevertAssert(); } foreach (string format in formats) { if (dataGridStringBuilders[format] != null) { dataObject.SetData(format, dataGridStringBuilders[format].ToString(), false /*autoConvert*/); } } // This assert is there for an OLE Callback to register CSV type for the clipboard (new SecurityPermission(SecurityPermissionFlag.SerializationFormatter | SecurityPermissionFlag.UnmanagedCode)).Assert(); try { if (dataObject != null) { Clipboard.SetDataObject(dataObject, true /* Copy */); } } finally { SecurityPermission.RevertAll(); } } }