private void OnCopy(object sender, ExecutedRoutedEventArgs e) { if (HasSelection && _selectionRect.Width > 0 && _selectionRect.Height > 0) { //Copy to clipboard IDataObject dataObject; string textString = GetText(); object bmp = null; bmp = SystemDrawingHelper.GetBitmapFromBitmapSource(GetImage()); dataObject = new DataObject(); // Order of data is irrelevant, the pasting application will determine format dataObject.SetData(DataFormats.Text, textString, true); dataObject.SetData(DataFormats.UnicodeText, textString, true); if (bmp != null) { dataObject.SetData(DataFormats.Bitmap, bmp, true); } try { Clipboard.SetDataObject(dataObject, true); } catch (System.Runtime.InteropServices.ExternalException) { // Clipboard is failed to set the data object. return; } } }
private void OnCopy(object sender, ExecutedRoutedEventArgs e) { if (this.HasSelection && this._selectionRect.Width > 0.0 && this._selectionRect.Height > 0.0) { string text = this.GetText(); object obj = null; bool flag = false; if (this._scope is DocumentGrid && ((DocumentGrid)this._scope).DocumentViewerOwner is DocumentApplicationDocumentViewer) { if (!e.UserInitiated && !this.HasRubberBandCopyPermissions()) { return; } flag = true; } else { flag = this.HasRubberBandCopyPermissions(); } if (flag) { obj = SystemDrawingHelper.GetBitmapFromBitmapSource(this.GetImage()); } new UIPermission(UIPermissionClipboard.AllClipboard).Assert(); IDataObject dataObject; try { dataObject = new DataObject(); dataObject.SetData(DataFormats.Text, text, true); dataObject.SetData(DataFormats.UnicodeText, text, true); if (obj != null) { dataObject.SetData(DataFormats.Bitmap, obj, true); } } finally { CodeAccessPermission.RevertAssert(); } PermissionSet permissionSet = new PermissionSet(PermissionState.None); permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.SerializationFormatter)); permissionSet.AddPermission(new UIPermission(UIPermissionClipboard.AllClipboard)); permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)); if (flag) { CodeAccessPermission perm = SecurityHelper.CreateMediaAccessPermission(null); permissionSet.AddPermission(perm); } permissionSet.Assert(); try { Clipboard.SetDataObject(dataObject, true); } catch (ExternalException) { } finally { CodeAccessPermission.RevertAssert(); } } }
private void OnCopy(object sender, ExecutedRoutedEventArgs e) { if (HasSelection && _selectionRect.Width > 0 && _selectionRect.Height > 0) { //Copy to clipboard IDataObject dataObject; string textString = GetText(); object bmp = null; bool supportImageCopy = false; if (_scope is DocumentGrid && ((DocumentGrid)_scope).DocumentViewerOwner is DocumentApplicationDocumentViewer) { // This is XPSViewer, make sure it is user initiated if (!e.UserInitiated && !HasRubberBandCopyPermissions()) { return; } supportImageCopy = true; } else { //Outside of XPSViewer, support image copy in full trust only supportImageCopy = HasRubberBandCopyPermissions(); } if (supportImageCopy) { bmp = SystemDrawingHelper.GetBitmapFromBitmapSource(GetImage()); } (new UIPermission(UIPermissionClipboard.AllClipboard)).Assert();//BlessedAssert try { dataObject = new DataObject(); // Order of data is irrelevant, the pasting application will determine format dataObject.SetData(DataFormats.Text, textString, true); dataObject.SetData(DataFormats.UnicodeText, textString, true); if (bmp != null) { dataObject.SetData(DataFormats.Bitmap, bmp, true); } } finally { UIPermission.RevertAssert(); } PermissionSet ps = new PermissionSet(PermissionState.None); ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.SerializationFormatter)); ps.AddPermission(new UIPermission(UIPermissionClipboard.AllClipboard)); ps.AddPermission(new SecurityPermission(SecurityPermissionFlag.UnmanagedCode)); if (supportImageCopy) { CodeAccessPermission mediaAccessPermission = SecurityHelper.CreateMediaAccessPermission(null); ps.AddPermission(mediaAccessPermission); } ps.Assert(); // BlessedAssert try { Clipboard.SetDataObject(dataObject, true); } catch (System.Runtime.InteropServices.ExternalException) { // Clipboard is failed to set the data object. return; } finally { SecurityPermission.RevertAssert(); } } }