Example #1
0
        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;
                }
            }
        }
Example #2
0
 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();
         }
     }
 }
Example #3
0
        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();
                }
            }
        }