Drop对象
- 文件拖拽支持
- AllowDrop属性与Drop事件;当设置为True的时候则可以响应Drop事件。
Demo:如何把一个图片拖拽到Silverlight里。
XAML:
<UserControl x:Class="ImageDropDemo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel x:Name="stpContainer" Margin="10">
<TextBlock Text="把图片拖放到下面区域:" FontWeight="Bold" Margin="10"/>
<ScrollViewer x:Name="scvContainer" Width="750" Height="500" HorizontalAlignment="Left"/>
</StackPanel>
</Grid>
</UserControl>
XAML.CS:
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace ImageDropDemo
{
public partial class MainPage : UserControl
{
//需要引用System.Windows.Controls.Toolkit 才能使用WrapPanel
//WrapPanel类:从左至右按顺序位置定位子元素,将内容断开至下一行在包含框的边缘。后续排序按照 Orientation 属性的值按照从上至下或从右至左的顺序进行
private WrapPanel imageContainer = null;
private SolidColorBrush highLightColor = new SolidColorBrush(Colors.DarkGray);
private SolidColorBrush transParentColor = new SolidColorBrush(Colors.Transparent);
public MainPage()
{
InitializeComponent();
imageContainer = new WrapPanel() { Background = new SolidColorBrush(Colors.LightGray) };
scvContainer.Content = imageContainer;
//让imageContainer允许Drop拖放,任何其他容器也有这个属性。
imageContainer.AllowDrop = true;
//注册Drop事件
imageContainer.Drop += new DragEventHandler(imageContainer_Drop);
}
void imageContainer_Drop(object sender, DragEventArgs e)
{
//获取拖拽进来的所有文件信息
FileInfo[] droppeedFiles = e.Data.GetData(DataFormats.FileDrop) as FileInfo[];
foreach (FileInfo droppedFile in droppeedFiles)
{
//判断.后缀名是否支持(jpg和png格式图片)
if (IsSupportedImageFile(droppedFile.Extension))
{
//创建图片边框border 在border里放置图片
Border imagePlaceHolder = new Border()
{
Child = CreateImage(droppedFile),
Background = transParentColor,
Margin = new Thickness(10.0),
Cursor = Cursors.Hand
};
//显示图片的tooltip信息
ToolTipService.SetToolTip(imagePlaceHolder, droppedFile.Name);
//鼠标移到或移除图片上时,改变图片边框颜色
imagePlaceHolder.MouseEnter += new MouseEventHandler(imagePlaceHolder_MouseEnter);
imagePlaceHolder.MouseLeave += new MouseEventHandler(imagePlaceHolder_MouseLeave);
//把这个子对象添加到imageContainer里进行显示。
imageContainer.Children.Add(imagePlaceHolder);
}
}
}
void imagePlaceHolder_MouseLeave(object sender, MouseEventArgs e)
{
(sender as Border).Background = transParentColor;
}
void imagePlaceHolder_MouseEnter(object sender, MouseEventArgs e)
{
(sender as Border).Background = highLightColor;
}
private Image CreateImage(FileInfo droppedFile)
{
//读取Drop拖拽进来的文件转换成image格式文件
using (FileStream fileStream = droppedFile.OpenRead())
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(fileStream);
return new Image()
{
Source = bitmapImage,
Width = 100,
Margin = new Thickness(5.0)
};
}
}
private bool IsSupportedImageFile(string extension)
{
switch (extension.Trim().ToLower())
{
case ".jpg":
case ".png":
return true;
default: break;
}
return false;
}
}
}