C#WPF – 拖动图像
发布时间:2020-12-16 00:23:19 所属栏目:百科 来源:网络整理
导读:我试图获得一些简单的功能,从文件中获取图像,将其添加到Canvas,然后允许用户左键单击(并保持)图像,然后将其拖动到Canvas(即更新图像的地点) 这是我到目前为止,我应该添加什么? private void btnAddImage_Click(object sender,RoutedEventArgs e) { try { Sy
我试图获得一些简单的功能,从文件中获取图像,将其添加到Canvas,然后允许用户左键单击(并保持)图像,然后将其拖动到Canvas(即更新图像的地点)
这是我到目前为止,我应该添加什么? private void btnAddImage_Click(object sender,RoutedEventArgs e) { try { System.Windows.Forms.OpenFileDialog open = new System.Windows.Forms.OpenFileDialog(); open.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp"; if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK) { PictureBox PictureBox1 = new PictureBox(); PictureBox1.Image = new Bitmap(open.FileName); myCanvas.children.add(PictureBox1); } } catch (Exception) { throw new ApplicationException("Failed loading image"); } } 解决方法
您可以向Canvas添加一个
Image控件,并在鼠标输入上修改其Left和Top属性.
XAML: <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <Canvas x:Name="canvas" MouseLeftButtonDown="CanvasMouseLeftButtonDown" MouseLeftButtonUp="CanvasMouseLeftButtonUp" MouseMove="CanvasMouseMove"/> <Button Grid.Row="1" Content="Add Image" Click="AddButtonClick"/> </Grid> 代码背后: private void AddButtonClick(object sender,RoutedEventArgs e) { var dialog = new Microsoft.Win32.OpenFileDialog(); dialog.Filter = "Image Files (*.jpg; *.jpeg; *.gif; *.bmp)|*.jpg; *.jpeg; *.gif; *.bmp"; if ((bool)dialog.ShowDialog()) { var bitmap = new BitmapImage(new Uri(dialog.FileName)); var image = new Image { Source = bitmap }; Canvas.SetLeft(image,0); Canvas.SetTop(image,0); canvas.Children.Add(image); } } private Image draggedImage; private Point mousePosition; private void CanvasMouseLeftButtonDown(object sender,MouseButtonEventArgs e) { var image = e.Source as Image; if (image != null && canvas.CaptureMouse()) { mousePosition = e.GetPosition(canvas); draggedImage = image; Panel.SetZIndex(draggedImage,1); // in case of multiple images } } private void CanvasMouseLeftButtonUp(object sender,MouseButtonEventArgs e) { if (draggedImage != null) { canvas.ReleaseMouseCapture(); Panel.SetZIndex(draggedImage,0); draggedImage = null; } } private void CanvasMouseMove(object sender,MouseEventArgs e) { if (draggedImage != null) { var position = e.GetPosition(canvas); var offset = position - mousePosition; mousePosition = position; Canvas.SetLeft(draggedImage,Canvas.GetLeft(draggedImage) + offset.X); Canvas.SetTop(draggedImage,Canvas.GetTop(draggedImage) + offset.Y); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |