2010-11-13 82 views
1

嗨 我是WPF C#的初学者,我开发了一个简单的C#WPF应用程序,它是一个包含图像控件的简单窗口,我想将任何图像文件从我的电脑,并把它的图像控制显示it.And我在XML文件如何在C#WPF应用程序中拖放图像文件

<Image Height="150" Name="image1" Stretch="Fill" Width="200" AllowDrop="True" Drop="image1_Drop" DragEnter="image1_DragEnter"/> 

和代码文件中写下面的洞这个

代码(*的.cs)

private void image1_DragEnter(object sender, DragEventArgs e) 
     { 
      if(e.Data.GetDataPresent(DataFormats.Bitmap)) 
       e.Effects=DragDropEffects.Copy; 
      else 
       e.Effects=DragDropEffects.None; 
     } 
    private void image1_Drop(object sender, DragEventArgs e) 
     { 

     image1.Source = (BitmapImage)e.Data.GetData(DataFormats.Bitmap); 
     } 

但它不工作(在拖动时,图像控制光​​标成为含回斜线的圆),我不为什么可以在任何一个HLP 由于事先


更新回答

我已经改变了代码为以下之一,但有同样的问题

private void image1_DragEnter(object sender, DragEventArgs e) 
     { 

     if(e.Data.GetDataPresent(DataFormats.Text)) 
       e.Effects=DragDropEffects.Copy; 
      else 
       e.Effects=DragDropEffects.None; 
     } 

private void image1_Drop(object sender, DragEventArgs e) 
     { 

      string fpath = (string)e.Data.GetData(DataFormats.Text); 
      BitmapImage tmpImage=new BitmapImage((new Uri(fpath))); 
      image1.Source = tmpImage;  

     } 
+0

对不起标题是如何拖放图像文件 – user506735 2010-11-13 14:53:34

回答

1

当从文件系统将文件拖动到程序,你没有得到位图数据剪贴板。您以字符串的形式获取文件的完整路径。您需要打开文件,读取数据,然后设置图像源。

+0

感谢快速回复 – user506735 2010-11-13 19:55:13

+0

我已经改变了我的代码 – user506735 2010-11-13 19:55:54

+0

我已经改变了我的代码成为 private void image1_DragEnter(object sender,DragEventArgs e) if(e.Data.GetDataPresent(DataFormats.Bitmap)) e.Effects = DragDropEffects.Copy; else e.Effects = DragDropEffects。没有; } – user506735 2010-11-13 20:05:37

1

你正在运行你的应用程序或Visual Studio,托管管理特权下的应用程序?

如果是这种情况,Windows会阻止拖放操作的发生。在Windows 7或Vista中,具有较低安全权限的应用程序(具有普通用户权限的Windows资源管理器)无法将数据发送到具有较高安全权限的另一个应用程序(具有管理权限的应用程序或Visual Studio)。

尝试做下列条件之一:

运行您的Visual Studio没有管理权限。 在没有管理权限的情况下在Visual Studio外运行您的应用程序。 启用并持续到OS中的管理员帐户。在这种情况下,Windows资源管理器和Visual Studio都将具有管理权限。

干杯,

雅各

1

我有同样的问题。结束了VS有这个奇怪的小故障,它不会显示AllowDrop设置为true的选项,所以你必须手动编写它。它不会显示在Intellitype,但它会使它工作!

所以非常简单,只是坚持PictureBox.AllowDrop = true;到你的代码,它会工作:d