WPF 复制粘贴到系统粘贴板中以供鼠标右键粘贴
复制到剪切板
Transform transform = inside.LayoutTransform;
inside.LayoutTransform = null;
Point point = outside.TranslatePoint(new Point(), inside);
imgx = point.X; imgy = point.Y;
System.Windows.Size size = new System.Windows.Size(inside.Width * scalimg, inside.Height * scalimg);
inside.Measure(size);
inside.Arrange(new Rect(imgx * scalimg, imgy * scalimg, size.Width * scalimg, size.Height * scalimg));
double scale = 300 / 96 * scalimg;
RenderTargetBitmap bmp = new RenderTargetBitmap((int)(scale * (size.Width + 1)),
(int)(scale * (size.Height + 1)),
scale * 96,
scale * 96, PixelFormats.Default);
bmp.Render(inside);
System.Windows.Clipboard.SetImage(bmp);
复制到剪切板
public static voidCopyUIElementToClipboard(FrameworkElementui)
{
doublewidth = ui.ActualWidth;
doubleheight = ui.ActualHeight;
RenderTargetBitmapbmp = newRenderTargetBitmap((int)Math.Round(width),
(int)Math.Round(height), 96, 96, PixelFormats.Default);
DrawingVisualdv = newDrawingVisual();
using(DrawingContextdc = dv.RenderOpen())
{
VisualBrushvb = newVisualBrush(ui);
dc.DrawRectangle(vb, null,newRect(newPoint(), newSize(width, height)));
}
bmp.Render(dv);
Clipboard.SetImage(bmp);
}
复制或剪切文件到剪切板
/// <summary>
/// 复制或剪切文件到剪切板
/// </summary>
/// <param name="files">文件路径数组</param>
/// <param name="cut">true:剪切;false:复制</param>
public static void CopyToClipboard(string[] files, bool cut)
{
if (files == null) return;
IDataObject data = new DataObject(DataFormats.FileDrop, files);
MemoryStream memo = new MemoryStream(4);
byte[] bytes = new byte[] { (byte)(cut?2:5),0,0,0};
memo.Write(bytes,0,bytes.Length);
data.SetData("PreferredDropEffect",memo);
Clipboard.SetDataObject(data,false);
}
复制文本
private void La_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
StackPanel st = e.Source as StackPanel;
StringBuilder Copystr = new StringBuilder();
foreach (TextBox tb in GetChildObjects<TextBox>(st))
{
Copystr.Append(" ");
Copystr.Append(tb.Text);
SolidColorBrush myBrush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(0xFF, 0xad, 0xd6, 0xff));
tb.Background = myBrush;
}
Clipboard.SetText(Copystr.ToString());
MessageToolTip.Show("数据复制成功");
}
保存图片
// UI --> Png
public static void UISaveToPng(this FrameworkElement ui, string fileName)
{
int width = (int)ui.ActualWidth;
int height = (int)ui.ActualHeight;
RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Pbgra32);
bmp.Render(ui);
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
FileStream fs = new FileStream(fileName, FileMode.Create);
encoder.Save(fs);
fs.Close();
}
转BitmapImage
int width = (int)grid2DMap.ActualWidth;
int height = (int)grid2DMap.ActualHeight;
RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Pbgra32);
bmp.Render(grid2DMap);
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
BitmapImage bitmapImage = new BitmapImage();
using (var memoryStream = new MemoryStream())
{
encoder.Save(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.StreamSource = memoryStream;
bitmapImage.EndInit();
}
转System.Drawing.Image
MemoryStream memoryStream = new MemoryStream(); encoder.Save(memoryStream); System.Drawing.Image img = System.Drawing.Image.FromStream(memoryStream);

浙公网安备 33010602011771号